関数から返されたクライアント ソケットのソケット オプションを設定しようとしていaccept()
ます。しかし、それらは正しく設定されていません。
私の目的は、特定の時間非アクティブになった後にクライアントをタイムアウトにすることです。ただし、サーバーは引き続き他のクライアント接続を受け入れることができるはずです。
以下は、ソケットオプションを設定するコードです。何が間違っているのか教えてください。
while ((new_sock_fd = accept(socket_fd, (struct sockaddr *) &cli_addr, &clilen)) > 0)
{
if (new_sock_fd < 0)
printf("Accept Error");
else
{
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
if (setsockopt(new_sock_fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
error("setsockopt failed\n");
if (setsockopt(new_sock_fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
error("setsockopt failed\n");
pthread_create(&thread, NULL, client_handler, (void *) (intptr_t)new_sock_fd); //intptr_t is big enough to hold the integer prt
}
}