Browse Source

Add a way to create TR_Socket socket pairs

1.0.0
Georg Hopp 10 years ago
parent
commit
7a8bdb3e5e
  1. 2
      include/tr/socket.h
  2. 1
      src/Makefile.am
  3. 57
      src/socket_pair.c
  4. 2
      src/udp_socket.c

2
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:

1
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 \

57
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 <http://www.gnu.org/licenses/>.
*/
//#include <errno.h>
//#include <stdlib.h>
//#include <unistd.h>
//#include <stdio.h>
//#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#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:

2
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];

Loading…
Cancel
Save