summaryrefslogtreecommitdiff
path: root/src/ivysocket.c
diff options
context:
space:
mode:
authorfcolin1998-10-20 11:31:53 +0000
committerfcolin1998-10-20 11:31:53 +0000
commit7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0 (patch)
tree3bf304a300f3d7b6a20b34db5795b043d0d3074b /src/ivysocket.c
parente54cc4c102de2899701122ea264e9d5116275507 (diff)
downloadivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.zip
ivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.tar.gz
ivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.tar.bz2
ivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.tar.xz
correction bus buscleanup et fermeture bus
Diffstat (limited to 'src/ivysocket.c')
-rw-r--r--src/ivysocket.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/ivysocket.c b/src/ivysocket.c
index 04e44bf..131813d 100644
--- a/src/ivysocket.c
+++ b/src/ivysocket.c
@@ -31,12 +31,11 @@ static ChannelClose channel_close = NULL;
#define MAX_BUFFER 2048
-
-typedef struct _server *Server;
-
struct _server {
Server next;
+ HANDLE fd;
Channel channel;
+ unsigned short port;
void *(*create)(Client client);
void (*handle_delete)(Client client, void *data);
SocketInterpretation interpretation;
@@ -173,7 +172,7 @@ static void HandleServer(Channel channel, HANDLE fd, void *data)
client->data = (*server->create)( client );
}
-int SocketServer(unsigned short port,
+Server SocketServer(unsigned short port,
void*(*create)(Client client),
void(*handle_delete)(Client client, void *data),
void(*interpretation)( Client client, void *data, char *ligne))
@@ -235,12 +234,26 @@ int SocketServer(unsigned short port,
fprintf(stderr,"NOK Memory Alloc Error\n");
exit(0);
}
+ server->fd = fd;
server->channel = (*channel_setup)( fd, server, DeleteSocket, HandleServer );
server->create = create;
server->handle_delete = handle_delete;
server->interpretation = interpretation;
- return ntohs(local.sin_port);
+ server->port = ntohs(local.sin_port);
+ return server;
}
+unsigned short SocketServerGetPort( Server server )
+{
+ return server->port;
+}
+void SocketServerClose( Server server )
+{
+ (*channel_close)( server->channel );
+ shutdown( server->fd, 2 );
+ close( server->fd );
+ LIST_REMOVE( servers_list, server );
+}
+
char *SocketGetPeerHost( Client client )
{
int err;