#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h> //strlen
#include <arpa/inet.h> //inet_addr
#include <unistd.h> //write
#include <pthread.h>
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888
void *connection_handler(void *);
int main(int argc , char *argv[])
{
int socket_desc, new_socket, c, *new_sock;
struct sockaddr_in server, client;
pthread_t sniffer_thread;
//Create socket
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
//Sockaddr struct
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons (SERVER_PORT);
//bind socket to a port
bind(socket_desc, (struct sockaddr *)&server, sizeof(server));
//puts("bind done");
//listen, max 20 connections
listen(socket_desc,20);
//Accept and incoming connection
puts("waiting for incoming connection..."); c = sizeof(struct sockaddr_in);
while(new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c))
//while(1)
{
*new_sock = new_socket;
pthread_create(&sniffer_thread, NULL, connection_handler, (void*)new_sock);
}
//close(socket_desc);
return 0;
}
void *connection_handler(void *socket_desc)
{
int sock = *(int*)socket_desc;
int sendback_nu;
char *message, client_message[3];
read
(sock
, client_message
, strlen(client_message
)); printf("client_message = %s \r\n",client_message
); int temp_nu
= atoi(client_message
); char text[5];
puts("this is a thread message"); sendback_nu = temp_nu * 100 + 5;
message = text;
write
(sock
, message
, strlen(message
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPiAgLy9zdHJsZW4KI2luY2x1ZGUgPGFycGEvaW5ldC5oPiAgLy9pbmV0X2FkZHIKI2luY2x1ZGUgPHVuaXN0ZC5oPiAgLy93cml0ZQojaW5jbHVkZSA8cHRocmVhZC5oPgoKI2RlZmluZSBTRVJWRVJfSVAgIjEyNy4wLjAuMSIKI2RlZmluZSBTRVJWRVJfUE9SVCA4ODg4Cgp2b2lkICpjb25uZWN0aW9uX2hhbmRsZXIodm9pZCAqKTsKCmludCBtYWluKGludCBhcmdjICwgY2hhciAqYXJndltdKQp7CiAgICBpbnQgc29ja2V0X2Rlc2MsIG5ld19zb2NrZXQsIGMsICpuZXdfc29jazsKICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXIsIGNsaWVudDsKICAgIHB0aHJlYWRfdCBzbmlmZmVyX3RocmVhZDsKCiAgICAvL0NyZWF0ZSBzb2NrZXQKICAgIHNvY2tldF9kZXNjID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKICAgIAogICAgLy9Tb2NrYWRkciBzdHJ1Y3QKICAgIHNlcnZlci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgIHNlcnZlci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwogICAgc2VydmVyLnNpbl9wb3J0ID0gaHRvbnMgKFNFUlZFUl9QT1JUKTsKCiAgICAvL2JpbmQgc29ja2V0IHRvIGEgcG9ydAogICAgYmluZChzb2NrZXRfZGVzYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXIsIHNpemVvZihzZXJ2ZXIpKTsKICAgIC8vcHV0cygiYmluZCBkb25lIik7CgogICAgLy9saXN0ZW4sIG1heCAyMCBjb25uZWN0aW9ucwogICAgbGlzdGVuKHNvY2tldF9kZXNjLDIwKTsKCiAgICAvL0FjY2VwdCBhbmQgaW5jb21pbmcgY29ubmVjdGlvbgogICAgcHV0cygid2FpdGluZyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbi4uLiIpOwogICAgYyA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwogICAgd2hpbGUobmV3X3NvY2tldCA9IGFjY2VwdChzb2NrZXRfZGVzYywgKHN0cnVjdCBzb2NrYWRkciAqKSZjbGllbnQsIChzb2NrbGVuX3QqKSZjKSkKICAgIC8vd2hpbGUoMSkKICAgIHsKICAgICAgICBuZXdfc29jayA9IG1hbGxvYygxKTsKICAgICAgICAqbmV3X3NvY2sgPSBuZXdfc29ja2V0OwogICAgICAgIHB0aHJlYWRfY3JlYXRlKCZzbmlmZmVyX3RocmVhZCwgTlVMTCwgY29ubmVjdGlvbl9oYW5kbGVyLCAodm9pZCopbmV3X3NvY2spOwogICAgfQogICAgLy9jbG9zZShzb2NrZXRfZGVzYyk7CiAgICByZXR1cm4gMDsKfQoKdm9pZCAqY29ubmVjdGlvbl9oYW5kbGVyKHZvaWQgKnNvY2tldF9kZXNjKQp7CiAgICBpbnQgc29jayA9ICooaW50Kilzb2NrZXRfZGVzYzsKICAgIGludCBzZW5kYmFja19udTsKICAgIGNoYXIgKm1lc3NhZ2UsIGNsaWVudF9tZXNzYWdlWzNdOwoKICAgIHJlYWQoc29jaywgY2xpZW50X21lc3NhZ2UsIHN0cmxlbihjbGllbnRfbWVzc2FnZSkpOwogICAgcHV0cyhjbGllbnRfbWVzc2FnZSk7CiAgICBwcmludGYoImNsaWVudF9tZXNzYWdlID0gJXMgXHJcbiIsY2xpZW50X21lc3NhZ2UpOwogICAgaW50IHRlbXBfbnUgPSBhdG9pKGNsaWVudF9tZXNzYWdlKTsKICAgIGNoYXIgdGV4dFs1XTsKICAgIAogICAgcHV0cygidGhpcyBpcyBhIHRocmVhZCBtZXNzYWdlIik7CiAgICBzZW5kYmFja19udSA9IHRlbXBfbnUgKiAxMDAgKyA1OwogICAgc3ByaW50Zih0ZXh0LCIlZCIsc2VuZGJhY2tfbnUpOwogICAgbWVzc2FnZSA9IHRleHQ7CgogICAgd3JpdGUoc29jaywgbWVzc2FnZSwgc3RybGVuKG1lc3NhZ2UpKTsKICAgIHB1dHMoInNlbmQgYmFjayIpOwogICAgcHV0cyhtZXNzYWdlKTsKICAgIGZyZWUoc29ja2V0X2Rlc2MpOwogICAgcmV0dXJuIDA7Cn0=