The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Неблокируемые сокеты"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Неблокируемые сокеты"  
Сообщение от BsDr (??) on 27-Фев-06, 13:12 
Здравствуйте!
Такой вопрос: Неовчодимо написать клиента для сервера на неблокируемом сокете, как тест сделал это:

#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.
Или я чтото не так делаю, подскажите!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Неблокируемые сокеты"  
Сообщение от BsDr (ok) on 27-Фев-06, 15:04 
Все впорядке, ложная тревога!
При переносе клиента с amd64 на i386 проблема решилась.
Кто-нибудь знает опции ядра чтобы и в amd64 заработало? ОС FreeBsd 5.4.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру