On Tue, 10 Feb 2004, Andrew wrote:

> 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,


This is not a bug

select says "yes there is room inm the socket buffer"
however datagram protocols do not store anythign in the outgoing socket
buffer, but, instead hand the packets directly to the driver for the
NIC.

when the NIC fils up it returns ENOBUFS

this is your cue to do a usleep(1000)
before sending more packets.
> 
> 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;
> }
> 
> 
> _______________________________________________
> [EMAIL PROTECTED] mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "[EMAIL PROTECTED]"
> 

_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to