Помогите плиз, есть прога, которая принимает 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. Почему?
Спасибо!