Ich versuche, eine Buchse mit einem recv Timeout von 1 Sekunde zu implementieren:Socket mit Recv-Timeout: Was ist falsch an diesem Code?
int sockfd;
struct sockaddr_in self;
struct sockaddr_in client_addr;
int addrlen=sizeof(client_addr);
ssize_t nBytes;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
self.sin_family = AF_INET;
self.sin_port = htons(PORT);
self.sin_addr.s_addr = INADDR_ANY;
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on);
// 1 Sec Timeout
tv.tv_sec = 1;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv);
bind(sockfd, (struct sockaddr*)&self, sizeof(self));
listen(sockfd, 20);
clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);
nBytes = recv(clientfd, buffer, MAXBUF-1, 0);
Ohne 'setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, & tv, sizeof (tv),' die Anrufe und recv zu akzeptieren Arbeit, aber recv Blöcke
Mit. 'setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, & tv, sizeof (tv);' erzeugt der Anruf zu akzeptieren, den Fehler 'Resource temporarily unavailable'
Kann jemand bitte sagen. mir was ist falsch mit diesem Ansatz?
Haben Sie versucht, die setsockopt bewegen() aufrufen, um nach der accept()? – paxdiablo
gelten die auf dem abhörenden Socket (sockfd) festgelegten Optionen für die von accept (clientfd) erstellten Sockets? – Cogsy