diff --git a/include/tr/socket.h b/include/tr/socket.h index 4c66c1c..275bc96 100644 --- a/include/tr/socket.h +++ b/include/tr/socket.h @@ -150,6 +150,8 @@ TR_TcpSocket TR_socketAccept(TR_TcpSocket); #define TR_socketOpen(socket) \ (TR_socketInit((socket), NULL)) +void TR_socketPair(TR_Socket[2], int); + #endif // __TR_SOCKET_H__ // vim: set ts=4 sw=4: diff --git a/src/Makefile.am b/src/Makefile.am index c66867a..d57384d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,6 +12,7 @@ TRIO = stream.c \ socket_accept.c \ socket_nonblock.c \ socket_close.c \ + socket_pair.c \ socket_shutdown.c \ socket_shutdown_read.c \ socket_shutdown_write.c \ diff --git a/src/socket_pair.c b/src/socket_pair.c new file mode 100644 index 0000000..bd0a5f2 --- /dev/null +++ b/src/socket_pair.c @@ -0,0 +1,57 @@ +/** + * \file + * + * \author Georg Hopp + * + * \copyright + * Copyright © 2014 Georg Hopp + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +//#include +//#include +//#include +//#include +//#include + +#include +#include +#include + +#include "tr/socket.h" +#include "trbase.h" + +void +TR_socketPair(TR_Socket sockets[2], int type) +{ + int handles[2]; + + if (0 > socketpair(AF_UNIX, SOCK_DGRAM, 0, handles)) { + TR_loggerLog( + TR_logger, + TR_LOGGER_ERR, + "Unable to create socket pair"); + return; + } + + sockets[0] = TR_new(TR_Socket, NULL, NULL, 0, 0); + sockets[1] = TR_new(TR_Socket, NULL, NULL, 0, 0); + TR_socketType(sockets[0]) = type; + TR_socketType(sockets[1]) = type; + TR_socketHandle(sockets[0]) = handles[0]; + TR_socketHandle(sockets[1]) = handles[1]; +} + +// vim: set ts=4 sw=4: diff --git a/src/udp_socket.c b/src/udp_socket.c index 276b19b..b74ce88 100644 --- a/src/udp_socket.c +++ b/src/udp_socket.c @@ -55,7 +55,7 @@ udpSocketRecv(void * _this, size_t size) ssize_t received; TR_RemoteData rdata; TR_Socket remote = TR_new(TR_UdpSocket, this->log, NULL, 0, 0); - + size = size>TR_UDP_MAX_READ_BLOCK ? TR_UDP_MAX_READ_BLOCK : size; unsigned char buffer[size];