moved address function call to thread - fiche - A pastebin adjusted for gopher use
(HTM) git clone git://vernunftzentrum.de/fiche.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 716453901872eff2a0889d2a2eb73c0b16730968
(DIR) parent ac40afb00baee79055558f057f830715cf7ee5d9
(HTM) Author: solusipse <solus1ps3@gmail.com>
Date: Mon, 9 Sep 2013 03:47:25 +0200
moved address function call to thread
Diffstat:
fiche.c | 27 ++++++++++++++++-----------
fiche.h | 6 ++++++
2 files changed, 22 insertions(+), 11 deletions(-)
---
(DIR) diff --git a/fiche.c b/fiche.c
@@ -49,14 +49,17 @@ int main(int argc, char **argv)
void *thread_connection(void *args)
{
+ int connection_socket = ((struct thread_arguments *) args ) -> connection_socket;
+ struct sockaddr_in client_address = ((struct thread_arguments *) args ) -> client_address;
+
+ int n;
char buffer[BUFSIZE];
- int n, client = *(int *)args;
bzero(buffer, BUFSIZE);
-
- int status = recv(client, buffer, BUFSIZE, 0);
+ int status = recv(connection_socket, buffer, BUFSIZE, 0);
if (status != -1)
{
+ get_client_address(client_address);
char slug[SLUG_SIZE];
generate_url(buffer, slug);
@@ -64,17 +67,17 @@ void *thread_connection(void *args)
strcpy(response, DOMAIN);
strcat(response, slug);
strcat(response, "/\n");
- write(client, response, strlen(response));
+ write(connection_socket, response, strlen(response));
}
else
{
+ get_client_address(client_address);
printf("Invalid connection.\n");
- write(client, "Use netcat.\n", 13);
+ write(connection_socket, "Use netcat.\n", 13);
}
- close(client);
+ close(connection_socket);
pthread_exit(NULL);
- return NULL;
}
void perform_connection(int listen_socket)
@@ -84,9 +87,9 @@ void perform_connection(int listen_socket)
struct sockaddr_in client_address;
int address_lenght = sizeof(client_address);
- int connection_socket = accept(listen_socket, (struct sockaddr *) &client_address, &address_lenght);
+ int connection_socket = accept(listen_socket, (struct sockaddr *) &client_address, (void *) &address_lenght);
- struct timeval timeout;
+ struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
@@ -95,9 +98,11 @@ void perform_connection(int listen_socket)
if (setsockopt (connection_socket, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
error();
- get_client_address(client_address);
+ struct thread_arguments arguments;
+ arguments.connection_socket = connection_socket;
+ arguments.client_address = client_address;
- if (pthread_create(&thread_id, NULL, &thread_connection, &connection_socket) != 0)
+ if (pthread_create(&thread_id, NULL, &thread_connection, &arguments) != 0)
error();
else
pthread_detach(thread_id);
(DIR) diff --git a/fiche.h b/fiche.h
@@ -65,4 +65,10 @@ void parse_parameters(int argc, char **argv);
struct sockaddr_in set_address(struct sockaddr_in serveraddr);
+struct thread_arguments
+{
+ int connection_socket;
+ struct sockaddr_in client_address;
+};
+
#endif
\ No newline at end of file