サーバーの切断

サーバーがクライアントからのデータの受信を完了し、データをクライアントに送り返すと、サーバーはクライアントから切断され、ソケットがシャットダウンされます。

ソケットを切断してシャットダウンするには

  1. サーバーがクライアントへのデータの送信を完了すると、ソケットの送信側を シャットダウン するSD_SENDを指定してシャットダウン関数を呼び出すことができます。 これにより、クライアントはこのソケットのリソースの一部を解放できます。 サーバー アプリケーションは引き続きソケット上のデータを受信できます。

    // shutdown the send half of the connection since no more data will be sent
    iResult = shutdown(ClientSocket, SD_SEND);
    if (iResult == SOCKET_ERROR) {
        printf("shutdown failed: %d\n", WSAGetLastError());
        closesocket(ClientSocket);
        WSACleanup();
        return 1;
    }
    
  2. クライアント アプリケーションがデータの受信を完了すると、 closesocket 関数が呼び出されてソケットが閉じられます。

    Windows ソケット DLL を使用してクライアント アプリケーションが完了すると、 WSACleanup 関数が呼び出されてリソースが解放されます。

    // cleanup
    closesocket(ClientSocket);
    WSACleanup();
    
    return 0;
    

完全なサーバー ソース コード

Winsock を使用したはじめに

Winsock サーバー アプリケーション

サーバーでのデータの受信と送信

Winsock クライアントとサーバーのコード サンプルの実行