Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* A simple server in the internet domain using TCP
- The port number is passed as an argument */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/uio.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <errno.h>
- void error(const char *msg)
- {
- perror(msg);
- exit(1);
- }
- int main(int argc, char *argv[])
- {
- int sockfd, newsockfd, portno;
- socklen_t clilen;
- struct sockaddr_in serv_addr, cli_addr;
- int n;
- ssize_t recv;
- struct msghdr mh;
- struct iovec iov[1];
- char primo[256];
- memset(&mh, 0, sizeof(mh));
- memset(iov, 0, sizeof(iov));
- /* Specify the components of the message in an "iovec".*/
- iov[0] .iov_base = (caddr_t)primo;
- iov[0] .iov_len = sizeof(primo);
- /*set iov in mh*/
- mh.msg_iov = iov;
- mh.msg_iovlen = sizeof(iov);
- printf("Structures initialized \n");
- if (argc < 2) {
- fprintf(stderr,"ERROR, no port provided\n");
- exit(1);
- }
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- if (sockfd < 0)
- error("ERROR opening socket");
- bzero((char *) &serv_addr, sizeof(serv_addr));
- portno = atoi(argv[1]);
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr = INADDR_ANY;
- serv_addr.sin_port = htons(portno);
- if (bind(sockfd, (struct sockaddr *) &serv_addr,
- sizeof(serv_addr)) < 0)
- error("ERROR on binding");
- listen(sockfd,500);
- clilen = sizeof(cli_addr);
- newsockfd = accept(sockfd,
- (struct sockaddr *) &cli_addr,
- &clilen);
- if (newsockfd < 0)
- error("ERROR on accept");
- printf("Waiting on recvmsg() \n");
- recv = recvmsg(sockfd, &mh, 0);
- if (recv == -1) {
- perror("recvmsg failed ");
- strerror(errno);
- return -1;
- }
- n = write(newsockfd,"I got your message",18);
- if (n < 0) error("ERROR writing to socket");
- close(newsockfd);
- close(sockfd);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement