2.2 KiB
System Calls
Below are the system calls that can be used to access network functionality.
-
getaddrinfo() :
-
Purpose :
It helps set up the structs, specifically struct addrinfo. It does all the dirty work like DNS and service name lookup and fill up the structs with all the relevant information based on the parameters passed.
-
Function prototye
int getaddrinfo(const char *node, // e.g. "www.example.com" or IP const char *service, // e.g. "http" or port number const struct addrinfo *hints, struct addrinfo **res);-
node :
Type :
const char *Value : Domain name or IP in form of string.
Purpose : To help find the host computer IP address for connection.
-
service :
Type :
const char *Value : Service/Protocol or Port in form of string.
Purpose : To help specify the port number in the host computer.
-
hints :
Type :
const struct addrinfo *Value : Pointer to struct addrinfo.
Purpose : To guide how it should fetch relevent data and store it to
struct addrinfo **res. -
res :
Type :
struct addrinfo **Value : Pointer to linked list of struct addrinfo *
-
-
Return Type :
Non-zero value in case of error or zero, otherwise.
Code Snippet
int status; struct addrinfo hints; struct addrinfo *servinfo; // will point to the results memset(&hints, 0, sizeof hints); // make sure the struct is // garbage free hints.ai_family = AF_UNSPEC; // don't care IPv4 or IPv6 hints.ai_socktype = SOCK_STREAM; // TCP stream sockets hints.ai_flags = AI_PASSIVE; // fill in my IP(my host) for me if ((status = getaddrinfo(NULL, "3490", &hints, &servinfo)) != 0){ fprintf(stderr, "getaddrinfo erro: %s\n", gai_strerror(status)); exit(1); } // servinfo now points to a linked list of 1 or more struct // addrinfos // ... do everything until you don't need servinfo anymore ... freeaddrinfo(servinfo); // free the linked list
-