I am relatively new to C structures, and I have to pass the structure (serv_addr) between these functions. How do I do this?
Basically, I want to pass the 'structure serv_addr' from the 'main function' to the 'myAddr function'. The 'myAddr function' will populate the 'structure serv_addr'. Then the 'myListen function' starts the connection using the 'structure serv_addr'.
How do I do this?
Thanks.
My current code is below.
Code:
// Includes
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
// TCP/IPv6
// Function declarations
int myListen(struct sockaddr *serv_addr);
int myAddr(struct sockaddr *serv_addr);
// MAIN
int main(void) {
// Init Vars
struct sockaddr_in6 serv_addr;
int myAddrReturn;
int myListenReturn;
myAddrReturn = myAddr(&serv_addr); // Populate structure
myListenReturn = myListen(&serv_addr); // Start TCP/IPv6 connection
// Print return values
printf("addrReturn: %d", myAddrReturn);
printf("listenReturn: %d", myListenReturn);
}
// Populate structure function
int myAddr(struct sockaddr *serv_addr) {
int portno = 3344;
// Populate Addr
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin6_flowinfo = 0;
serv_addr.sin6_family = AF_INET6; // AF_INET6 = 10;
serv_addr.sin6_addr = in6addr_any;
serv_addr.sin6_port = htons(portno); // Convert the port number to network byte order
return(0); // Return on success
}
// Start TCP/IPv6 connection
int myListen(struct sockaddr *serv_addr) {
// Declare Vars
int sockfd, tempVar;
// Sockets Layer Call: socket()
sockfd = socket(AF_INET6, SOCK_STREAM, 0);
// socket() Error Catch
if (sockfd < 0) {
return(1);
}
// Sockets Layer Call: bind()
tempVar = bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr));
// Bind() Error Catch
if (tempVar < 0) {
return(2);
}
tempVar = listen(sockfd, 5);
return(55);
}