socket_bsd.c

来自「CS架构的多平台的GUI系统」· C语言 代码 · 共 111 行

C
111
字号
/***************************************************************************    begin                : Mon Aug 15 2005    copyright            : (C) 2005 by Alper Akcan    email                : distchx@yahoo.com ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU Lesser General Public License as        * *   published by the Free Software Foundation; either version 2.1 of the  * *   License, or (at your option) any later version.                       * *                                                                         * ***************************************************************************/static int s_socket_bsd_init (void){	return 0;}static int s_socket_bsd_uninit (void){	return 0;}static int s_socket_bsd_poll (struct pollfd *ufds, nfds_t nfds, int timeout){	return s_pipe_api_poll(ufds, nfds, timeout);}static int s_socket_bsd_recv (int s, void *read_buf, int total_size){	int r = 0;	int r_size = 0;	while (total_size != r_size) {		r = recv(s, read_buf + r_size, total_size - r_size, MSG_NOSIGNAL);		if (r <= 0) {			s_socket_api_close(s);			return -1;		}		r_size += r;	}	return r_size;}static int s_socket_bsd_send (int s, void *write_buf, int total_size){	int w = 0;	int w_size = 0;	while (total_size != w_size) {		w = send(s, write_buf + w_size, total_size - w_size, MSG_NOSIGNAL);		if (w <= 0) {			s_socket_api_close(s);			return -1;		}		w_size += w;	}	return w_size;}static int s_socket_bsd_socket (int domain, int type, int protocol){	return socket(domain, type, protocol);}static int s_socket_bsd_bind (int sockfd, const s_sockaddr_t *my_addr, socklen_t addrlen){	unsigned int yes = 1;	if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) {		debugf(DSER | DSYS, "Reusing ADDR failed");		return -1;	}	return bind(sockfd, my_addr, addrlen);}static int s_socket_bsd_listen (int s, int backlog){	return listen(s, backlog);}static int s_socket_bsd_accept (int s, s_sockaddr_t *addr, socklen_t *addrlen){	return accept(s, addr, addrlen);}static int s_socket_bsd_connect (int sockfd, const s_sockaddr_t *serv_addr, socklen_t addrlen){	return connect(sockfd, serv_addr, addrlen);}static int s_socket_bsd_close (int fd){	shutdown(fd, SHUT_RDWR);	close(fd);	return 0;}static s_socket_api_t s_socket_api_bsd = {	s_socket_bsd_init,	s_socket_bsd_uninit,	s_socket_bsd_poll,	s_socket_bsd_recv,	s_socket_bsd_send,	s_socket_bsd_socket,	s_socket_bsd_bind,	s_socket_bsd_listen,	s_socket_bsd_accept,	s_socket_bsd_connect,	s_socket_bsd_close};

⌨️ 快捷键说明

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