元の投稿:
私は、Beej の学校向けネットワーク プログラミング ガイドからネットワーク プログラミングを学んでいます。私は現在、スレッドと I/O 多重化を使用して複数の接続間で同時に通信するためのプロトタイプに取り組んでいます。接続を受信し、accept() を呼び出して、新しいファイル記述子を返す代わりに "new_fd" に新しいファイル記述子を返すと、1 が返されるという問題が発生しています。私のコードのどこにもstdoutを閉じず、accept()はソケットへの参照を新しいファイル記述子として返すことになっています。私が知る限り、スレッドは単一のプロセスで同じファイル記述子を共有するため、問題にはなりません私はそれをねじ込みました。ループバックを使って自分のパソコンから接続していたのが問題かと思いましたが、
元の投稿コード: http://pastebin.com/APQYjxg9 (すべてのコードを投稿しました)
わかりやすくするためにこれを編集します。私のコードには2つの問題がありました。最初のものはR..によってすぐに指摘され、そのコードスニペットは次のとおりです。
if (value = pthread_create((chat+chat_count), NULL, chatDaemon, (void *) &new_fd) != 0)
{ -snip- }
void * chatDaemon(void * fd)
{
int my_fd = *((int *)fd);
-snip-
}
後で何がうまくいかなかったのかを理解し、回答を投稿しました。そのためのコード スニペットは次のとおりです。
if (new_fd = accept(listen_fd, (struct sockaddr*) &(remoteHost), &addrlen) != -1) { -snip-}