1. ホーム
  2. リナックス

ソケットプログラミング,select:不正なファイルディスクリプタ

2022-02-28 16:13:47

最初のselectはサーバーのソケットで、接続されたfdを受け入れ、selectを追加した後、selectエラーが発生します...。

セットのいずれかに無効なファイル記述子が指定されました。(おそらく、すでに閉じられたファイル記述子か、エラーが発生したファイル記述子でしょう)。 

その理由は、ソケットが誤って閉じられていたことが判明したためです



<スパン という記述もご覧ください。

エラーメッセージは 不正なファイル記述子

その理由は、上記の書き方が間違っていたためです

int ret=SOCKET_ERROR;
 fd_set FDRead={0};
 struct timeval timeout={0};

 
  FD_ZERO(&FDRead);
  FD_SET(sock, &FDRead);

        timeout.tv_sec = EPOLL_SERVER_TIME_OUT;
        timeout.tv_usec = EPOLL_SERVER_TIME_OUT_MILLSECONDS;

  ret = select(sock+1, &FDRead, 0, 0, &timeout);

  if(ret == SOCKET_ERROR)
  {

   break;
  }








int ret=SOCKET_ERROR;
 fd_set FDRead={0};
 struct timeval timeout={0};

 
  FD_ZERO(&FDRead);
  FD_SET(sock, &FDRead);

        timeout.tv_sec = EPOLL_SERVER_TIME_OUT;
        timeout.tv_usec = EPOLL_SERVER_TIME_OUT_MILLSECONDS;

  ret = select(sock+1, &FDRead, 0, 0, &timeout);

  if(ret == SOCKET_ERROR)
  {

   break;
  }





無関係なソケットイベントを捕捉してはいけない!