socklen_t lskerr = sizeof(skerr);
result = len = -1;
-
- getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
- if (!skerr) {
+ if (!getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr) && !skerr) {
#ifndef MSG_NOSIGNAL
len = recv(fd, reply, sizeof(reply), 0);
#else
memset(&sa, 0, sizeof(sa));
str = strdup(str);
+ if (str == NULL)
+ goto out_nofree;
if ((c = strrchr(str,':')) != NULL) {
*c++ = '\0';
sa.sin_family = AF_INET;
free(str);
+ out_nofree:
return &sa;
}
memset(mask, 0, sizeof(*mask));
memset(addr, 0, sizeof(*addr));
str = strdup(str);
+ if (str == NULL)
+ return 0;
if ((c = strrchr(str, '/')) != NULL) {
*c++ = '\0';
int skerr;
socklen_t lskerr = sizeof(skerr);
- getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
- if (skerr)
+ ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
+ if (ret == -1 || skerr)
ret = -1;
else
ret = recv(fd, b->r, max, 0);
if (fdtab[fd].state == FD_STCONN) {
int skerr;
socklen_t lskerr = sizeof(skerr);
- getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
- if (skerr) {
+ ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
+ if (ret == -1 || skerr) {
b->flags |= BF_WRITE_ERROR;
fdtab[fd].state = FD_STERROR;
task_wakeup(&rq, fdtab[fd].owner);
int skerr;
socklen_t lskerr = sizeof(skerr);
- getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
- if (skerr)
+ ret = getsockopt(fd, SOL_SOCKET, SO_ERROR, &skerr, &lskerr);
+ if (ret == -1 || skerr)
ret = -1;
else
ret = send(fd, b->w, max, MSG_DONTWAIT);