mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-21 17:56:47 +00:00
Add read_nonblock() function
Deal with platforms where EWOULDBLOCK != EAGAIN
This commit is contained in:
parent
e378a8dc82
commit
dcf7209304
24
net.c
24
net.c
@ -47,6 +47,25 @@ int _set_block(int fd, const char *file, unsigned int line, const char *function
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _read_nonblock(int fd, void *buf, size_t len, const char *file, unsigned int line, const char *function)
|
||||
{
|
||||
ssize_t nread = read(fd, buf, len);
|
||||
if (nread == -1) {
|
||||
switch (errno) {
|
||||
case EINTR:
|
||||
case EAGAIN:
|
||||
#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
|
||||
case EWOULDBLOCK:
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
logMessage_perror(LOG_LEVEL_ERROR, file, line, function, "read_nonblock: read(%d,%p,%lu)",
|
||||
fd, buf, (unsigned long)len);
|
||||
return -1;
|
||||
}
|
||||
return nread;
|
||||
}
|
||||
|
||||
int _write_all(int fd, const void *buf, size_t len, const char *file, unsigned int line, const char *function)
|
||||
{
|
||||
ssize_t written = write(fd, buf, len);
|
||||
@ -68,8 +87,11 @@ int _write_nonblock(int fd, const void *buf, size_t len, const char *file, unsig
|
||||
ssize_t written = write(fd, buf, len);
|
||||
if (written == -1) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
case EINTR:
|
||||
case EAGAIN:
|
||||
#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
|
||||
case EWOULDBLOCK:
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
logMessage_perror(LOG_LEVEL_ERROR, file, line, function, "write_nonblock: write(%d,%p %s,%lu)",
|
||||
|
2
serval.h
2
serval.h
@ -1565,6 +1565,7 @@ void sigIoHandler(int signal);
|
||||
|
||||
#define set_nonblock(fd) (_set_nonblock(fd, __FILE__, __LINE__, __FUNCTION__))
|
||||
#define set_block(fd) (_set_block(fd, __FILE__, __LINE__, __FUNCTION__))
|
||||
#define read_nonblock(fd,buf,len) (_read_nonblock(fd, buf, len, __FILE__, __LINE__, __FUNCTION__))
|
||||
#define write_all(fd,buf,len) (_write_all(fd, buf, len, __FILE__, __LINE__, __FUNCTION__))
|
||||
#define write_nonblock(fd,buf,len) (_write_nonblock(fd, buf, len, __FILE__, __LINE__, __FUNCTION__))
|
||||
#define write_all_nonblock(fd,buf,len) (_write_all_nonblock(fd, buf, len, __FILE__, __LINE__, __FUNCTION__))
|
||||
@ -1573,6 +1574,7 @@ void sigIoHandler(int signal);
|
||||
|
||||
int _set_nonblock(int fd, const char *file, unsigned int line, const char *function);
|
||||
int _set_block(int fd, const char *file, unsigned int line, const char *function);
|
||||
int _read_nonblock(int fd, void *buf, size_t len, const char *file, unsigned int line, const char *function);
|
||||
int _write_all(int fd, const void *buf, size_t len, const char *file, unsigned int line, const char *function);
|
||||
int _write_nonblock(int fd, const void *buf, size_t len, const char *file, unsigned int line, const char *function);
|
||||
int _write_all_nonblock(int fd, const void *buf, size_t len, const char *file, unsigned int line, const char *function);
|
||||
|
Loading…
x
Reference in New Issue
Block a user