Skip to contentSkip to conversation

F_SETSIG broken/changed in 2.6 for UDP and TCP sockets?

DISCUSSION Russell Leighton 2 participants 2 messages May 31, 2004 – Jun 2, 2004

lore
Share & tools
lore
#0 lore raw

I have a program that works fine under stock rh9 (2.4.2-8) but has issues getting signaled under FedoraCore2 (2.6.5-1.358) using SETSIG to a Posix RT signal.

The program does the standard:

/* hook to process */
if ( fcntl(fdcallback->fd, F_SETOWN, mon->handler_q.thread->pid) == -1 ) {
aw_log(fdcallback->handler->logger, AW_ERROR_LOG_LEVEL,
"cannot set owner on fd (%s)",
strerror(errno));
}/* end if */

/* make async */
if ( fcntl(fdcallback->fd, F_SETFL, (O_NONBLOCK | O_ASYNC) ) == -1 ) {
aw_log(fdcallback->handler->logger, AW_ERROR_LOG_LEVEL,
"cannot set async on fd (%s)",
strerror(errno));
}/* end if */

/* hook to signal */
if ( fcntl(fdcallback->fd, F_SETSIG, AW_SIG_FD) == -1 ) {
aw_log(fdcallback->handler->logger, AW_ERROR_LOG_LEVEL,
"cannot set signal on fd (%s)", strerror(errno));
}/* end if */

Under Fedora things work well for raw sockets (much lower latency than in 2.4!) but are inconsistent with udp or tcp sockets.

In the udp case, I when I listen for multicast packets my app only receives them when I am running a tcpdump (bizarre!).

In the tcp case, I don't get signaled if I do the F_SETSIG on more than 1 fd.

Any tips on tracking this down would be much appreciated.

Thx

Russ

#1 lore raw
Quoted 2 lines · Russell Leighton

In the udp case, I when I listen for multicast packets my app only receives them when I am running a tcpdump (bizarre!).

That bit at least isn't so surprising - tcpdump is probably setting the interface to promiscuous mode which lets you receive everything. What does groups does "netstat -gn" say you are subscribed to, though?

Mike

Signature · 3 lines
Mike Jagdis                        Web: http://www.eris-associates.co.uk
Eris Associates Limited            Tel: +44 7780 608 368
Reading, England                   Fax: +44 118 926 6974