私は現在、maxWaitTimeがアイドル状態になった後にクライアントを切断するエコーサーバーを作成しています。
クライアントがデータを送信するまでプログラムがソケットをブロックすることを期待していましたが、gdbでプログラムを実行すると、Readlineでselectとblocksが実行されます。
retval = 0は、選択を通過するたびに、fd_setソックスが[256、(31ゼロ)]になり、選択後、ソックスが[32ゼロ]になることを知っています。
接続の受け入れは別の関数で行われ、接続記述子はエコー関数に渡されます。
あなたが私を正しい方向に向けるのを手伝ってくれるか、一定の時間が経過した後にクライアントを切断する方法を教えてくれたら、私に知らせてください。
さらに詳しい情報が必要な場合はお知らせください。
前もって感謝します!
FD_ZERO(&sock);
FD_SET(sockfd,&sock);
int opt = 3;
setsockopt(sockfd, SOL_SOCKET, SO_RCVLOWAT,&opt,sizeof(opt));
timeout.tv_sec = maxWaitTime;
timeout.tv_usec = 0;
for ( ; ; ) {
FD_SET(sockfd,&sock);
printf("Set is %d\n",FD_ISSET(sockfd,&sock));
int retval;
retval = select(1, &sock, NULL, NULL, &timeout);
if(retval)
{
quitProgram(number);
}
else
{
printf("n is %d\n",retval);
if ( (n = Readline(sockfd, line, MAXLINE)) == 0)
{
return; /* connection closed by other end */
}
Writen(sockfd, line, n);
}
`