ソケットを作成
更新日2006年10月03日
参照 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/creating_a_socket.asp

初期化処理の後、SOCKETオブジェクトは実体化する必要があります。

ソケットを作成します

  1. getaddrinfo関数の呼出部分は、コマンドラインよりサーバ名用のIPアドレスを必要とします。 そのアプリケーションについて、そのインターネットファミリィについては、IPv6またはIPv4のどちらのアドレスも使用可能です。そのアプリケーションは、ソケットタイプとしてTCPプロトコル用のストリームソケットを必要とします。
    
    #define DEFAULT_PORT "27015"
    
    struct addrinfo *result = NULL,
                    *ptr = NULL,
                    hints;
    int iResult;
    
    ZeroMemory( &hints, sizeof(hints) );
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    
    /*
     * サーバーアドレスとポートを分解する
     */
    iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 )
    {
        printf("getaddrinfo failed: %d\n", iResult);
        WSACleanup();
        return 1;
    }
    
    
  2. ConnectSocketと言う名前にてSOCKETオブジェクトを作成します。
    
    SOCKET ConnectSocket = INVALID_SOCKET;
    
    
  3. そのsocket関数呼出し、そして、そのConnectSocket変数へ値を戻す。 このアプリケーションのために、そのgetaddrinfo呼出しによって戻される、そのインターネットアドレスファミリィ、ストリーミングソケッツ、そして、そのTCP/IPプロトコル、を使ってください。
    
    /*
     * サーバへ接続用のSOCKETを作成する
     */
    ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, 
            ptr->ai_protocol);
    
    
  4. エラーチェックはそのソケットが妥当である処を確実とします。
    
    if (ConnectSocket == INVALID_SOCKET)
    {
        printf("Error at socket(): %ld\n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return;
    }
    
    

socket関数に渡されるパラメータは、実装の違いについて変更する事が出来ます。

エラー特定はネットワーキングコードの成功の重要な鍵です. もしそのsocket呼出が失敗したならば、INVALID_SOCKETを戻します。 前のコードのifステートメントは、ソケット作成時にエラーが発生した場合にエラーをキャッチします。 WSAGetLastErrorは、最後に発生したエラー番号を戻します。

ノート  アプリケーションによっては、より広範囲なエラーチェックが必要です。

WSACleanupはWS2_32 DLLの使用終了に使われます。

サーバ次のステップ: ソケットをバインディング

クライアント次のステップ: ソケットへの接続