properly check for EAGAIN in recv() calls

If recv() has no more messages on a non-blocking socket, errno will be EAGAIN,
not the return value!
This commit is contained in:
Harald Welte 2009-12-24 13:35:18 +01:00
parent e98d4278d0
commit fb33957405
2 changed files with 5 additions and 5 deletions

View File

@ -270,8 +270,8 @@ struct msgb *ipaccess_read_msg(struct bsc_fd *bfd, int *error)
hh = (struct ipaccess_head *) msg->data; hh = (struct ipaccess_head *) msg->data;
ret = recv(bfd->fd, msg->data, 3, 0); ret = recv(bfd->fd, msg->data, 3, 0);
if (ret < 0) { if (ret < 0) {
if (ret != -EAGAIN) if (errno != EAGAIN)
LOGP(DINP, LOGL_ERROR, "recv error %s\n", strerror(errno)); LOGP(DINP, LOGL_ERROR, "recv error %d %s\n", ret, strerror(errno));
msgb_free(msg); msgb_free(msg);
*error = ret; *error = ret;
return NULL; return NULL;

View File

@ -321,8 +321,8 @@ static int handle_udp_read(struct bsc_fd *bfd)
hh = (struct ipaccess_head *) msg->data; hh = (struct ipaccess_head *) msg->data;
ret = recv(bfd->fd, msg->data, msg->data_len, 0); ret = recv(bfd->fd, msg->data, msg->data_len, 0);
if (ret < 0) { if (ret < 0) {
if (ret != -EAGAIN) if (errno != EAGAIN)
DEBUGP(DINP, "recv error %s\n", strerror(errno)); LOGP(DINP, LOGL_ERROR, "recv error %s\n", strerror(errno));
msgb_free(msg); msgb_free(msg);
return ret; return ret;
} }
@ -635,7 +635,7 @@ struct msgb *ipaccess_read_msg(struct bsc_fd *bfd, int *error)
hh = (struct ipaccess_head *) msg->data; hh = (struct ipaccess_head *) msg->data;
ret = recv(bfd->fd, msg->data, 3, 0); ret = recv(bfd->fd, msg->data, 3, 0);
if (ret < 0) { if (ret < 0) {
if (ret != -EAGAIN) if (errno != EAGAIN)
LOGP(DINP, LOGL_ERROR, "recv error: %s\n", strerror(errno)); LOGP(DINP, LOGL_ERROR, "recv error: %s\n", strerror(errno));
msgb_free(msg); msgb_free(msg);
*error = ret; *error = ret;