⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sock_bsd.c

📁 基于sip协议的网络电话源码
💻 C
📖 第 1 页 / 共 2 页
字号:
				   int proto,				   pj_sock_t *sock){    PJ_CHECK_STACK();    /* Sanity checks. */    PJ_ASSERT_RETURN(sock!=NULL, PJ_EINVAL);    PJ_ASSERT_RETURN((unsigned)PJ_INVALID_SOCKET==INVALID_SOCKET,                      (*sock=PJ_INVALID_SOCKET, PJ_EINVAL));    *sock = WSASocket(af, type, proto, NULL, 0, WSA_FLAG_OVERLAPPED);    if (*sock == PJ_INVALID_SOCKET) 	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}#else/* * Create new socket/endpoint for communication and returns a descriptor. */PJ_DEF(pj_status_t) pj_sock_socket(int af, 				   int type, 				   int proto, 				   pj_sock_t *sock){    PJ_CHECK_STACK();    /* Sanity checks. */    PJ_ASSERT_RETURN(sock!=NULL, PJ_EINVAL);    PJ_ASSERT_RETURN(PJ_INVALID_SOCKET==-1,                      (*sock=PJ_INVALID_SOCKET, PJ_EINVAL));    *sock = socket(af, type, proto);    if (*sock == PJ_INVALID_SOCKET)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else 	return PJ_SUCCESS;}#endif/* * Bind socket. */PJ_DEF(pj_status_t) pj_sock_bind( pj_sock_t sock, 				  const pj_sockaddr_t *addr,				  int len){    PJ_CHECK_STACK();    PJ_ASSERT_RETURN(addr && len >= sizeof(struct sockaddr_in), PJ_EINVAL);    if (bind(sock, (struct sockaddr*)addr, len) != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Bind socket. */PJ_DEF(pj_status_t) pj_sock_bind_in( pj_sock_t sock, 				     pj_uint32_t addr32,				     pj_uint16_t port){    pj_sockaddr_in addr;    PJ_CHECK_STACK();    SET_LEN(&addr, sizeof(pj_sockaddr_in));    addr.sin_family = PJ_AF_INET;    pj_bzero(addr.sin_zero, sizeof(addr.sin_zero));    addr.sin_addr.s_addr = pj_htonl(addr32);    addr.sin_port = pj_htons(port);    return pj_sock_bind(sock, &addr, sizeof(pj_sockaddr_in));}/* * Close socket. */PJ_DEF(pj_status_t) pj_sock_close(pj_sock_t sock){    int rc;    PJ_CHECK_STACK();#if defined(PJ_WIN32) && PJ_WIN32!=0 || \    defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE!=0    rc = closesocket(sock);#else    rc = close(sock);#endif    if (rc != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Get remote's name. */PJ_DEF(pj_status_t) pj_sock_getpeername( pj_sock_t sock,					 pj_sockaddr_t *addr,					 int *namelen){    PJ_CHECK_STACK();    if (getpeername(sock, (struct sockaddr*)addr, (socklen_t*)namelen) != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else {	RESET_LEN(addr);	return PJ_SUCCESS;    }}/* * Get socket name. */PJ_DEF(pj_status_t) pj_sock_getsockname( pj_sock_t sock,					 pj_sockaddr_t *addr,					 int *namelen){    PJ_CHECK_STACK();    if (getsockname(sock, (struct sockaddr*)addr, (socklen_t*)namelen) != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else {	RESET_LEN(addr);	return PJ_SUCCESS;    }}/* * Send data */PJ_DEF(pj_status_t) pj_sock_send(pj_sock_t sock,				 const void *buf,				 pj_ssize_t *len,				 unsigned flags){    PJ_CHECK_STACK();    PJ_ASSERT_RETURN(len, PJ_EINVAL);    *len = send(sock, (const char*)buf, *len, flags);    if (*len < 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Send data. */PJ_DEF(pj_status_t) pj_sock_sendto(pj_sock_t sock,				   const void *buf,				   pj_ssize_t *len,				   unsigned flags,				   const pj_sockaddr_t *to,				   int tolen){    PJ_CHECK_STACK();    PJ_ASSERT_RETURN(len, PJ_EINVAL);    *len = sendto(sock, (const char*)buf, *len, flags, 		  (const struct sockaddr*)to, tolen);    if (*len < 0) 	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else 	return PJ_SUCCESS;}/* * Receive data. */PJ_DEF(pj_status_t) pj_sock_recv(pj_sock_t sock,				 void *buf,				 pj_ssize_t *len,				 unsigned flags){    PJ_CHECK_STACK();    PJ_ASSERT_RETURN(buf && len, PJ_EINVAL);    *len = recv(sock, (char*)buf, *len, flags);    if (*len < 0) 	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Receive data. */PJ_DEF(pj_status_t) pj_sock_recvfrom(pj_sock_t sock,				     void *buf,				     pj_ssize_t *len,				     unsigned flags,				     pj_sockaddr_t *from,				     int *fromlen){    PJ_CHECK_STACK();    PJ_ASSERT_RETURN(buf && len, PJ_EINVAL);    PJ_ASSERT_RETURN(from && fromlen, (*len=-1, PJ_EINVAL));    *len = recvfrom(sock, (char*)buf, *len, flags, 		    (struct sockaddr*)from, (socklen_t*)fromlen);    if (*len < 0) 	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else {	RESET_LEN(from);	return PJ_SUCCESS;    }}/* * Get socket option. */PJ_DEF(pj_status_t) pj_sock_getsockopt( pj_sock_t sock,					pj_uint16_t level,					pj_uint16_t optname,					void *optval,					int *optlen){    PJ_CHECK_STACK();    PJ_ASSERT_RETURN(optval && optlen, PJ_EINVAL);    if (getsockopt(sock, level, optname, (char*)optval, (socklen_t*)optlen)!=0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Set socket option. */PJ_DEF(pj_status_t) pj_sock_setsockopt( pj_sock_t sock,					pj_uint16_t level,					pj_uint16_t optname,					const void *optval,					int optlen){    PJ_CHECK_STACK();    if (setsockopt(sock, level, optname, (const char*)optval, optlen) != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Connect socket. */PJ_DEF(pj_status_t) pj_sock_connect( pj_sock_t sock,				     const pj_sockaddr_t *addr,				     int namelen){    PJ_CHECK_STACK();    if (connect(sock, (struct sockaddr*)addr, namelen) != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Shutdown socket. */#if PJ_HAS_TCPPJ_DEF(pj_status_t) pj_sock_shutdown( pj_sock_t sock,				      int how){    PJ_CHECK_STACK();    if (shutdown(sock, how) != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Start listening to incoming connections. */PJ_DEF(pj_status_t) pj_sock_listen( pj_sock_t sock,				    int backlog){    PJ_CHECK_STACK();    if (listen(sock, backlog) != 0)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else	return PJ_SUCCESS;}/* * Accept incoming connections */PJ_DEF(pj_status_t) pj_sock_accept( pj_sock_t serverfd,				    pj_sock_t *newsock,				    pj_sockaddr_t *addr,				    int *addrlen){    PJ_CHECK_STACK();    PJ_ASSERT_RETURN(newsock != NULL, PJ_EINVAL);#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0    if (addr) {	SET_LEN(addr, *addrlen);    }#endif        *newsock = accept(serverfd, (struct sockaddr*)addr, (socklen_t*)addrlen);    if (*newsock==PJ_INVALID_SOCKET)	return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());    else {	#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0	if (addr) {	    RESET_LEN(addr);	}#endif	    	return PJ_SUCCESS;    }}#endif	/* PJ_HAS_TCP */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -