Mercurial > repos > rhope
view runtime/net.c @ 182:db30bda91aad
Cleanup grammar comment in new parser
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 27 Jul 2011 21:06:57 -0700 |
parents | 47ab97730865 |
children |
line wrap: on
line source
#include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <string.h> #include <stdio.h> #include <signal.h> int _internal_accept(int sockfd, char * addrbuf, int buflen) { int retfd; socklen_t addr_size; struct sockaddr_storage remote_addr; addr_size = sizeof(remote_addr); retfd = accept(sockfd, (struct sockaddr *)&remote_addr, &addr_size); if (addrbuf && buflen) { addrbuf[0] = '\0'; if(retfd == -1) return retfd; switch(remote_addr.ss_family) { case AF_INET: inet_ntop(AF_INET, &(((struct sockaddr_in *)&remote_addr)->sin_addr), addrbuf, buflen); break; case AF_INET6: inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)&remote_addr)->sin6_addr), addrbuf, buflen); break; } } return retfd; } int _internal_bindnewsocket(unsigned int port, int setreuse) { char portstr[6]; int sockfd,flag=1; struct addrinfo hints, *localaddr; snprintf(portstr, 6, "%d", port & 0xFFFF); memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; getaddrinfo(NULL, portstr, &hints, &localaddr); sockfd = socket(localaddr->ai_family, localaddr->ai_socktype, localaddr->ai_protocol); if (sockfd == -1) { freeaddrinfo(localaddr); return sockfd; } if(setreuse) setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,&flag,sizeof(int)); if(-1 == bind(sockfd, localaddr->ai_addr, localaddr->ai_addrlen)) { close(sockfd); sockfd = -1; } freeaddrinfo(localaddr); return sockfd; } int _internal_connectnewsocket(char * addr, int32_t port) { char portstr[6]; struct addrinfo hints, *res; int sock; memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; snprintf(portstr, 6, "%d", port & 0xFFFF); if(getaddrinfo(addr, portstr, &hints, &res)) return -1; if(-1 == (sock = socket(res->ai_family, res->ai_socktype, res->ai_protocol))) return -1; if(connect(sock, res->ai_addr, res->ai_addrlen)) { close(sock); sock = -1; } freeaddrinfo(res); return sock; } int _internal_ignoresigpipe() { struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_handler = SIG_IGN; return sigaction(SIGPIPE, &act, NULL); }