Помогите плиз, есть прога, которая принимает UDP пакеты и нить.
void *t(void*) // нить
{
...
return NULL;
}
int main(int argc, char *argv[])
{
int sock, nobr;
...
pthread_create(&tid, 0, t, 0);
...
// Сокет блокирующий
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
...
bind(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr_in));
...
nobr = recvfrom(sock, &a, sizeof(a), 0, (struct sockaddr*)&adr, sizeof(adr));
После этого nobr == -1, errno == EINTR. Если убрать pthread_create, то все ок. В чем трабла?
Нашел только один workaround: делать неблокирующий сокет, но мне хочется блокирующий и интересно, "из принципа", разобраться, почему не работает стандартный вариант.
И еще вопросец, если sock сделать глобальной переменной, то errno = EINVAL. Почему?
Спасибо!
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум [pthread][c][socket] recvfrom возвращает «bad file descriptor». (2011)
- Форум Не понимаю почему не работает (2013)
- Форум Помогите разобраться с потоками (2003)
- Форум Консольный обмен сообщениями (2017)
- Форум Пример программы UDP-сервера (2014)
- Форум Клиент, сервер и их правильная работа. (2005)
- Форум Сокеты в Си (продолжене) (2005)
- Форум Совместное использование одного UDP порта двумя сокетами (2023)
- Форум Сокеты передача сообщений между компьютерами. Помогите найти ошибку. (2012)
- Форум socket error (2009)