replaced select() by poll() in comments

This commit is contained in:
Gerhard Rieger 2008-09-04 23:42:52 +02:00
parent e142c3da6b
commit 1924e17cf0
6 changed files with 20 additions and 20 deletions

22
socat.c
View file

@ -684,10 +684,10 @@ int childleftdata(xiofile_t *xfd) {
int xiotransfer(xiofile_t *inpipe, xiofile_t *outpipe, int xiotransfer(xiofile_t *inpipe, xiofile_t *outpipe,
unsigned char **buff, size_t bufsiz, bool righttoleft); unsigned char **buff, size_t bufsiz, bool righttoleft);
bool mayrd1; /* sock1 has read data or eof, according to select() */ bool mayrd1; /* sock1 has read data or eof, according to poll() */
bool mayrd2; /* sock2 has read data or eof, according to select() */ bool mayrd2; /* sock2 has read data or eof, according to poll() */
bool maywr1; /* sock1 can be written to, according to select() */ bool maywr1; /* sock1 can be written to, according to poll() */
bool maywr2; /* sock2 can be written to, according to select() */ bool maywr2; /* sock2 can be written to, according to poll() */
/* here we come when the sockets are opened (in the meaning of C language), /* here we come when the sockets are opened (in the meaning of C language),
and their options are set/applied and their options are set/applied
@ -702,7 +702,7 @@ int _socat(void) {
unsigned char *buff; unsigned char *buff;
ssize_t bytes1, bytes2; ssize_t bytes1, bytes2;
int polling = 0; /* handling ignoreeof */ int polling = 0; /* handling ignoreeof */
int wasaction = 1; /* last select was active, do NOT sleep before next */ int wasaction = 1; /* last poll was active, do NOT sleep before next */
struct timeval total_timeout; /* the actual total timeout timer */ struct timeval total_timeout; /* the actual total timeout timer */
#if WITH_FILAN #if WITH_FILAN
@ -760,7 +760,7 @@ int _socat(void) {
/* for ignoreeof */ /* for ignoreeof */
if (polling) { if (polling) {
if (!wasaction) { if (!wasaction) {
/* yes we could do it with select but I like readable trace output */ /* yes we could do it with poll but I like readable trace output */
if (socat_opts.pollintv.tv_sec) Sleep(socat_opts.pollintv.tv_sec); if (socat_opts.pollintv.tv_sec) Sleep(socat_opts.pollintv.tv_sec);
if (socat_opts.pollintv.tv_usec) Usleep(socat_opts.pollintv.tv_usec); if (socat_opts.pollintv.tv_usec) Usleep(socat_opts.pollintv.tv_usec);
@ -804,7 +804,7 @@ int _socat(void) {
closing = 2; closing = 2;
} }
do { do { /* loop over poll() EINTR */
int _errno; int _errno;
childleftdata(sock1); childleftdata(sock1);
@ -859,7 +859,7 @@ int _socat(void) {
retval = xiopoll(fds, 4, timeout); retval = xiopoll(fds, 4, timeout);
_errno = errno; _errno = errno;
if (retval < 0 && errno == EINTR) { if (retval < 0 && errno == EINTR) {
Info1("select(): %s", strerror(errno)); Info1("poll(): %s", strerror(errno));
} }
errno = _errno; errno = _errno;
} while (retval < 0 && errno == EINTR); } while (retval < 0 && errno == EINTR);
@ -876,7 +876,7 @@ int _socat(void) {
timeout, strerror(errno)); timeout, strerror(errno));
return -1; return -1;
} else if (retval == 0) { } else if (retval == 0) {
Info2("select timed out (no data within %ld.%06ld seconds)", Info2("poll timed out (no data within %ld.%06ld seconds)",
closing>=1?socat_opts.closwait.tv_sec:socat_opts.total_timeout.tv_sec, closing>=1?socat_opts.closwait.tv_sec:socat_opts.total_timeout.tv_sec,
closing>=1?socat_opts.closwait.tv_usec:socat_opts.total_timeout.tv_usec); closing>=1?socat_opts.closwait.tv_usec:socat_opts.total_timeout.tv_usec);
if (polling && !wasaction) { if (polling && !wasaction) {
@ -927,7 +927,7 @@ int _socat(void) {
maywr2 = false; maywr2 = false;
total_timeout = socat_opts.total_timeout; total_timeout = socat_opts.total_timeout;
wasaction = 1; wasaction = 1;
/* is more data available that has already passed select()? */ /* is more data available that has already passed poll()? */
mayrd1 = (xiopending(sock1) > 0); mayrd1 = (xiopending(sock1) > 0);
if (XIO_RDSTREAM(sock1)->readbytes != 0 && if (XIO_RDSTREAM(sock1)->readbytes != 0 &&
XIO_RDSTREAM(sock1)->actbytes == 0) { XIO_RDSTREAM(sock1)->actbytes == 0) {
@ -955,7 +955,7 @@ int _socat(void) {
maywr1 = false; maywr1 = false;
total_timeout = socat_opts.total_timeout; total_timeout = socat_opts.total_timeout;
wasaction = 1; wasaction = 1;
/* is more data available that has already passed select()? */ /* is more data available that has already passed poll()? */
mayrd2 = (xiopending(sock2) > 0); mayrd2 = (xiopending(sock2) > 0);
if (XIO_RDSTREAM(sock2)->readbytes != 0 && if (XIO_RDSTREAM(sock2)->readbytes != 0 &&
XIO_RDSTREAM(sock2)->actbytes == 0) { XIO_RDSTREAM(sock2)->actbytes == 0) {

View file

@ -726,7 +726,7 @@ int _xioopen_dgram_recvfrom(struct single *xfd, int xioflags,
drop = true; drop = true;
} }
/* loop until select() returns valid */ /* loop until select()/poll() returns valid */
do { do {
struct pollfd readfd; struct pollfd readfd;
/*? int level = E_ERROR;*/ /*? int level = E_ERROR;*/

View file

@ -251,7 +251,7 @@ int xioopen_ipdgram_listen(int argc, const char *argv[], struct opt *opts,
} }
break; break;
} }
/* server: continue loop with select */ /* server: continue loop with socket()+recvfrom() */
/* when we dont close this we get awkward behaviour on Linux 2.4: /* when we dont close this we get awkward behaviour on Linux 2.4:
recvfrom gives 0 bytes with invalid socket address */ recvfrom gives 0 bytes with invalid socket address */
if (Close(fd->stream.fd) < 0) { if (Close(fd->stream.fd) < 0) {

View file

@ -3446,7 +3446,7 @@ int applyopts_single(struct single *xfd, struct opt *opts, enum e_phase phase) {
xfd->lock.intervall.tv_sec = 1; xfd->lock.intervall.tv_sec = 1;
xfd->lock.intervall.tv_nsec = 0; xfd->lock.intervall.tv_nsec = 0;
/*! this should be integrated into central select loop */ /*! this should be integrated into central select()/poll() loop */
if (xiolock(&xfd->lock) < 0) { if (xiolock(&xfd->lock) < 0) {
return -1; return -1;
} }

View file

@ -366,8 +366,8 @@ ssize_t xioread(xiofile_t *file, void *buff, size_t bufsiz) {
/* this function is intended only for some special address types where the /* this function is intended only for some special address types where the
select() call cannot strictly determine if (more) read data is available. select()/poll() calls cannot strictly determine if (more) read data is
currently this is for the OpenSSL based addresses. available. currently this is for the OpenSSL based addresses.
*/ */
ssize_t xiopending(xiofile_t *file) { ssize_t xiopending(xiofile_t *file) {
struct single *pipe; struct single *pipe;

View file

@ -1,5 +1,5 @@
/* source: xiowrite.c */ /* source: xiowrite.c */
/* Copyright Gerhard Rieger 2001-2007 */ /* Copyright Gerhard Rieger 2001-2008 */
/* Published under the GNU General Public License V.2, see file COPYING */ /* Published under the GNU General Public License V.2, see file COPYING */
/* this is the source of the extended write function */ /* this is the source of the extended write function */
@ -13,9 +13,9 @@
/* ... /* ...
note that the write() call can block even if the select() call reported the note that the write() call can block even if the select()/poll() call
FD writeable: in case the FD is not nonblocking and a lock defers the reported the FD writeable: in case the FD is not nonblocking and a lock
operation. defers the operation.
on return value < 0: errno reflects the value from write() */ on return value < 0: errno reflects the value from write() */
ssize_t xiowrite(xiofile_t *file, const void *buff, size_t bytes) { ssize_t xiowrite(xiofile_t *file, const void *buff, size_t bytes) {
ssize_t writt; ssize_t writt;