Здравствуйте!
Такой вопрос: Неовчодимо написать клиента для сервера на неблокируемом сокете, как тест сделал это:
#include "cli_test.h"
int main(int argc, char **argv)
{
int sock;
struct sockaddr_in u_servaddr;
int val;
int n;
int u_sockfd;
char buff[1024];
int rtrn;
u_sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&u_servaddr, sizeof(u_servaddr));
u_servaddr.sin_family = AF_INET;
u_servaddr.sin_port = htons(80);
if (inet_pton(AF_INET, "192.168.0.100", &(u_servaddr).sin_addr) <= 0)
{
printf("Can't convert IP!!!\n");
}
sock = connect(u_sockfd, (SA *) &u_servaddr, sizeof(u_servaddr));
printf("sock: %i\n", sock);
val = fcntl(u_sockfd, F_GETFL, 0);
n = fcntl(u_sockfd, F_SETFL, val|O_NONBLOCK);
for(;;)
{
sprintf(buff, "%s\r\n\r\n", "GET / HTTP/1.1");
printf("F1\n");
rtrn = write(u_sockfd, &buff, strlen(buff));
printf("F2\n");
if(rtrn < 0)
exit(0);
printf("rtrn: %i\n", rtrn);
rtrn = read(u_sockfd, &buff, sizeof(buff));
printf("read_buff: %s\n", buff);
}
close(u_sockfd);
return(1);
}
При равотающем сервере работает цикл, при выключении сервера (как мне кажется) программа должна завершить работу по условию if(rtrn < 0), но происходит следующее:
F1
Broken pipe
Я думаю что write при невозможности записать не должна блокироваться и вернуть управление с errno = EWOULDBLOCK.
Или я чтото не так делаю, подскажите!