mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-23 10:30:19 +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;
|
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)
|
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);
|
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);
|
ssize_t written = write(fd, buf, len);
|
||||||
if (written == -1) {
|
if (written == -1) {
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
case EAGAIN:
|
|
||||||
case EINTR:
|
case EINTR:
|
||||||
|
case EAGAIN:
|
||||||
|
#if defined(EWOULDBLOCK) && EWOULDBLOCK != EAGAIN
|
||||||
|
case EWOULDBLOCK:
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
logMessage_perror(LOG_LEVEL_ERROR, file, line, function, "write_nonblock: write(%d,%p %s,%lu)",
|
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_nonblock(fd) (_set_nonblock(fd, __FILE__, __LINE__, __FUNCTION__))
|
||||||
#define set_block(fd) (_set_block(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_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_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__))
|
#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_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 _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_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_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);
|
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