further info, on annoying bug
This function works and creates the socket ok and connects
Code:
int connects(char *server, char *port){
struct addrinfo hints, *res;
int sock;
memset(&hints,0,sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo(server,port,&hints,&res);
sock = socket(res->ai_family,res->ai_socktype,res->ai_protocol);
if(connect(sock,res->ai_addr,res->ai_addrlen)==-1){
bail("Connect");
}
printf("connected \n");
close(sock);
}
This function does not work and errors on set sock options reason: socket operation on non socket, i don't understand this as im creating the socket in the same way as above example
Code:
int createServer(char *port){
int serverSocket;
int yes = 1;
struct addrinfo hints,*res;
memset(&hints,0,sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if(getaddrinfo(NULL,port,&hints,&res) ==-1){
bail("Error getaddrinfo");
}
if(serverSocket = socket(res->ai_family,res->ai_socktype,res->ai_protocol)==-1)
bail("Errror socket");
if(setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int))==-1){
bail("Set Sock opt");
}
if(bind(serverSocket,res->ai_addr,res->ai_addrlen)==-1){
bail("Error Bind");
}
if(listen(serverSocket,5)==-1){
bail("Error Listen");
}
printf("Listening for connections on port %d..\n",port);
//more variables we need.
socklen_t addr_size;
int connectedSocket;
struct sockaddr_storage their_addr;
if(connectedSocket = accept(serverSocket,(struct sockaddr *)&their_addr,&addr_size)==-1){
bail("Error Accept");
}
return connectedSocket;
}