現在、setsockopt()
次のコードを使用してオプションを指定しようとしています。
// bind socket
// Use setsockopt() function to make sure the port is not in use
int yes = 1;
setsockopt(TCPSocket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
setsockopt(TCPSocket, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,sizeof(struct timeval));
status = bind(TCPSocket, host_info_list->ai_addr, host_info_list->ai_addrlen);
if (status == -1) std::cout << "bind error" << std::endl ;
// listen for connections
status = listen(TCPSocket, 5);
if (status == -1) std::cout << "listen error" << std::endl ;
int new_sd;
struct sockaddr_storage their_addr;
socklen_t addr_size = sizeof(their_addr);
new_sd = accept(TCPSocket, (struct sockaddr *)&their_addr, &addr_size);
if (new_sd == -1) std::cout << "listen error" << std::endl ;
Notetv
は既に指定された timeval です。
最初のsetsockopt()
呼び出しだけを行うと、すべて正常に動作します。ただし、2 番目 (エラーを返さない) を追加すると、コードで指定された 2 番目の「リッスン エラー」が発生します。タイムアウト値の設定がこれに影響する理由がわかりません。誰か説明できますか?
指定されたコードの功績は認めません。ここのチュートリアルに示されているコードから変更されています: http://codebase.eu/tutorial/linux-socket-programming-c/