원래 게시물 :pthread를 사용할 때 accept()가 stdout (1)에 대한 참조를 반환합니다.
저는 네트워크 프로그래밍을위한 Beej 's Guide에서 네트워크 프로그래밍을 배우고 있습니다. 현재 스레드와 I/O 다중화를 사용하여 여러 연결간에 동시에 통신하기위한 프로토 타입을 만들고 있습니다. 내가 연결을 수신 할 때 새로운 파일 설명자를 반환하는 대신 "new_fd"에 새 파일 설명자를 반환하는 accept()를 호출하면 문제가 발생합니다. 이는 1을 반환하기 때문에 나에게 이해가되지 않습니다. 내 코드에서 stdout을 닫지 않고 accept()는 새로운 파일 디스크립터로서 소켓에 대한 참조를 리턴하고, 스레드가 단일 프로세스에서 동일한 파일 디스크립터를 공유한다는 것을 알고 있다면 문제가되어서는 안된다. 나는 그것을 가지고있다. 나는 문제가 루프백을 사용하여 내 컴퓨터에서 연결되었다고 생각하지만, 내 IP 주소 나 다른 컴퓨터를 참조하여 연결했을 때 fd를 1로 반환하는 것과 같은 오류가 발생했습니다. 명확성을 위해이 편집 http://pastebin.com/APQYjxg9 (I 내 모든 코드를 게시했다)
:이 문제를
원래 게시 된 코드를 해결하기 위해 더 이상 볼 수 있습니다. 내 코드에는 두 가지 문제가있었습니다. 첫 번째는 .. 바로 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-}
어, 죄송합니다. 나는 이것을 잡지 못했습니다. "- 벽"은 그것을 잡았을 것이다. –