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:
parent
e98d4278d0
commit
fb33957405
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue