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

📄 tcp_opts.cc

📁 Source code for an Numeric Cmputer
💻 CC
字号:
/********************************************************************* Description: tcp_opts.cc**   Derived from a work by Fred Proctor & Will Shackleford** Author:* License: LGPL Version 2* System: Linux*    * Copyright (c) 2004 All rights reserved.** Last change: * $Revision: 1.3 $* $Author: paul_c $* $Date: 2005/05/23 16:34:12 $********************************************************************/#include "tcp_opts.hh"#include "rcs_print.hh"		/* rcs_print_error() */#include <errno.h>		// errno#include <string.h>		// strerror#include <netinet/tcp.h>	// TCP_NODELAY#include <netinet/in.h>		// TCP_NODELAY#include <sys/fcntl.h>		// fcntl, O_NONBLOCK#include <sys/types.h>#include <sys/socket.h>int set_tcp_socket_options(int socket_fd){    if (socket_fd <= 0) {	return -1;    }    int optval = 1;#ifdef TCP_NODELAY    if (setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY,	    (char *) &optval, sizeof(optval)) < 0) {	rcs_print_error(" Can`t set a socket option.\n");	rcs_print_error("errno = %d = %s\n", errno, strerror(errno));	return -1;    }#endif    optval = 1;    if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR,	    (char *) &optval, sizeof(optval)) < 0) {	rcs_print_error(" Can`t set a socket option.\n");	rcs_print_error("errno = %d = %s\n", errno, strerror(errno));	return -1;    }    struct linger linger_opt;    linger_opt.l_onoff = 0;    linger_opt.l_linger = 0;    if (setsockopt(socket_fd, SOL_SOCKET, SO_LINGER,	    (char *) &linger_opt, sizeof(linger_opt)) < 0) {	rcs_print_error(" Can`t set a socket option.\n");	rcs_print_error("errno = %d = %s\n", errno, strerror(errno));	return -1;    }    return 0;}int make_tcp_socket_nonblocking(int socket_fd){#ifdef O_NONBLOCK    if (-1 == fcntl(socket_fd, F_SETFL, O_NONBLOCK)) {	rcs_print_error("Couldn's set flag for non-blocking on socket.\n");	return -1;    }#else#ifdef O_NDELAY    if (-1 == fcntl(socket_fd, F_SETFL, O_NDELAY)) {	rcs_print_error("Couldn's set flag for no delay on socket.\n");	return -1;    }#endif#endif    return (0);}int make_tcp_socket_blocking(int socket_fd){#if defined(O_NONBLOCK) || defined(O_NDELAY)    int val = fcntl(socket_fd, F_GETFL, 0);    if (val < 0) {	rcs_print_error("fcntl error %d %s\n", errno, strerror(errno));	return -1;    }#ifdef O_NONBLOCK    val &= ~O_NONBLOCK;#endif#ifdef O_NDELAY    val &= ~O_NDELAY;#endif    if (fcntl(socket_fd, F_SETFL, val) < 0) {	rcs_print_error("Couldn's set flag for blocking on socket.: %d,%s\n",	    errno, strerror(errno));	return -1;    }#endif    return (0);}

⌨️ 快捷键说明

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