Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
passivesock.c
Package: linux-socket-program.rar [view]
Upload User: wei_4586
Upload Date: 2008-05-28
Package Size: 18k
Code Size: 2k
Category:
Linux Network
Development Platform:
Unix_Linux
- /* passivesock.c - passivesock */
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <stdlib.h>
- #include <string.h>
- #include <netdb.h>
- extern int errno;
- int errexit(const char *format, ...);
- unsigned short portbase = 0; /* port base, for non-root servers */
- /*------------------------------------------------------------------------
- * passivesock - allocate & bind a server socket using TCP or UDP
- *------------------------------------------------------------------------
- */
- int
- passivesock(const char *service, const char *transport, int qlen)
- /*
- * Arguments:
- * service - service associated with the desired port
- * transport - transport protocol to use ("tcp" or "udp")
- * qlen - maximum server request queue length
- */
- {
- struct servent *pse; /* pointer to service information entry */
- struct protoent *ppe; /* pointer to protocol information entry*/
- struct sockaddr_in sin; /* an Internet endpoint address */
- int s, type; /* socket descriptor and socket type */
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_addr.s_addr = INADDR_ANY;
- /* Map service name to port number */
- if ( pse = getservbyname(service, transport) )
- sin.sin_port = htons(ntohs((unsigned short)pse->s_port)
- + portbase);
- else if ((sin.sin_port=htons((unsigned short)atoi(service))) == 0)
- errexit("can't get "%s" service entryn", service);
- /* Map protocol name to protocol number */
- if ( (ppe = getprotobyname(transport)) == 0)
- errexit("can't get "%s" protocol entryn", transport);
- /* Use protocol to choose a socket type */
- if (strcmp(transport, "udp") == 0)
- type = SOCK_DGRAM;
- else
- type = SOCK_STREAM;
- /* Allocate a socket */
- s = socket(PF_INET, type, ppe->p_proto);
- if (s < 0)
- errexit("can't create socket: %sn", strerror(errno));
- /* Bind the socket */
- if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
- errexit("can't bind to %s port: %sn", service,
- strerror(errno));
- if (type == SOCK_STREAM && listen(s, qlen) < 0)
- errexit("can't listen on %s port: %sn", service,
- strerror(errno));
- return s;
- }