Add fd_utils

This commit is contained in:
Nils O. Selåsdal
2013-05-30 22:38:56 +02:00
parent cfc7cae5c0
commit 5a427007d6
2 changed files with 131 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include "ucore/fd_utils.h"
int set_nonblocking(int fd)
{
int flags = fcntl(fd,F_GETFL,NULL);
if(flags < 0 ) {
return flags;
}
return fcntl(fd,F_SETFL,flags | O_NONBLOCK);
}
int set_blocking(int fd)
{
int flags = fcntl(fd,F_GETFL,NULL);
if(flags < 0 ) {
return flags;
}
return fcntl(fd,F_SETFL,flags&~O_NONBLOCK);
}
int set_reuseaddr(int sockfd)
{
int opt = 1;
return setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(opt));
}
int set_tcp_keepalive(int sockfd)
{
int optval = 1;
return setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval));
}
int set_send_timeout(int sockfd,long timeoutms)
{
struct timeval so_sndtimeo = {timeoutms/1000,(timeoutms%1000)*1000};
return setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &so_sndtimeo, sizeof(so_sndtimeo));
}
int set_receive_timeout(int sockfd,long timeoutms)
{
struct timeval so_sndtimeo = {timeoutms/1000,(timeoutms%1000)*1000};
return setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &so_sndtimeo, sizeof(so_sndtimeo));
}
int
set_ip_dscp(int fd, unsigned int dscp) {
int val;
if (dscp > 63) {
errno = EINVAL;
return -1;
}
val = dscp << 2;
return setsockopt(fd, IPPROTO_IP, IP_TOS, &val, sizeof val);
}