作者 主題: c socket 結束連線  (閱讀 3075 次)

0 會員 與 1 訪客 正在閱讀本文。

zelda

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
c socket 結束連線
« 於: 2012-12-08 16:26 »
不好意思,又上來發問
我在server寫的一段測試
        mysock = socket(AF_INET, SOCK_STREAM, 0 );
        bind( mysock, ( struct sockaddr* )&sockAddr, sizeof( sockAddr ));
        listen( mysock, 20 );
        while(1){
           clientSock = accept( mysock, (struct sockaddr*)&client, &addrsize );
           printf("%d",clientSock);
           result = recv( clientSock, buffer, sizeof( buffer ), 0 );
           printf("%d", result);
           printf( "%s", buffer );
           char sendstring[] = "hello";
           send(clientSock, sendstring, sizeof(sendstring), 0);
           char test[1024];
           strcpy(test,inet_ntoa(client.sin_addr));
           printf("%s\n%d",test,ntohs(client.sin_port));
   }

問題是這樣的
當client發出close之後
server回應ack導致client進入FIN_WAIT_2
從網路上查到以下這段資料
當socket port收到對方送來FIN封包時,表示對方要關閉連線,此時送回ACK封包後,進入CLOSE_WAITING狀態,等待程式呼叫closesocket。當程式呼叫closesocket後,送出FIN封包給對方,並進入LAST_ACK狀態,等待對方回送ACK封包後,便進入TIME_WAIT狀態.
我要怎麼做或是調用什麼函式得知對方請求中斷連線?

zelda

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
Re: c socket 結束連線
« 回覆 #1 於: 2012-12-08 20:00 »
唉呀
想不到是這麼簡單的問題
最後終於找到答案了
原來只要判斷recv()的接收長度就可以了
只要為零就是對方切斷連線了
以下是找到的參考來源
http://kezeodsnx.pixnet.net/blog/post/27462696-socket-programming-%E7%AD%86%E8%A8%98