select, sendto and ENOBUFS
Andrew
andrew at ugh.net.au
Mon Feb 9 15:14:18 PST 2004
Hi,
I have a problem with sendto returning an error and setting errno to
ENOBUFS however I am calling select first to make sure the fd is
writeable (see below for code). s is a raw socket and the data I'm
sending is 1492 bytes. I haven't changed the low water mark for the
socket.
This looks like a bug however the bug may well be mine...
Does anyone have any ideas?
Thanks,
Andrew
do {
printf("waiting on socket\n");
FD_ZERO(&fdset);
FD_SET(s, &fdset);
if (select(s + 1, NULL, &fdset, NULL, NULL) == -1) {
warn("select");
return 0;
}
} while (! FD_ISSET(s, &fdset));
printf("socket ready\n");
if (se$ndto(s, (void *)ip_packet, ip_packet->ip_len, 0, (struct sockaddr
*)&sa, sizeof(sa)) == -1) {
if (errno == ENOBUFS) {
warn("sleeping 1 second - sendto");
sleep(1);
} else {
warn("sendto");
}
return 0;
}
More information about the freebsd-hackers
mailing list