Próbuję zaimplementować gniazda z timeout recv 1 sekundę:Gniazdo z funkcją time-rec-timeout: Co jest nie tak z tym kodem?
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);
Bez 'setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, & tv, sizeof (TV);' połączeń, aby zaakceptować i recv praca, ale RECV bloki
z 'setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, & tv, sizeof (TV), zwanej dalej' wezwanie do akceptują produkuje błędzie 'Zasoby chwilowo niedostępny'
Może ktoś proszę powiedzieć. mi co jest nie tak z tym podejściem?
Czy próbowałeś przesuwając setsockopt() zadzwonić do po accept()? – paxdiablo
czy opcje ustawione na gnieździe nasłuchowym (sockfd) mają zastosowanie do gniazd utworzonych przez accept (clientfd)? – Cogsy