- 195 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 00:09:14 ]
- WinSock2を使用して特定用途のTCP/IPサーバをCで作ろうとしていますが、ポート番号の自動割り振りでハマっています。
抜粋したコードは以下のとおりです。 WSADATA wsaData; int len; static SOCKET serverSocket; static struct sockaddr_in addr; if (WSAStartup(MAKEWORD(2, 2), &wsaData)) return -1; serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket == INVALID_SOCKET) return -1; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = INADDR_LOOPBACK; // ★ループバックアドレスを設定 addr.sin_port = htons(0); // ★ポート番号の自動割り振り bind(serverSocket, (struct sockaddr *)&addr, sizeof(addr)); len = sizeof(addr); getsockname(serverSocket, (struct sockaddr *)&addr, &len); // 自動的に割り振られたポート番号を取得 printf("%s\n", addr.sin_port); // 0が出力される listen(serverSocket, 1); getsocknameを行った後でaddr.sin_portに割り振られたポート番号が入っていることを期待するのですが、WinXP+VC7.1では0になっています。 手順がどこか悪いのでしょうか?
|

|