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

📄 tcpsocket.c

📁 一个LINUX下一个框架文件系统,运行编译环境:RED HAT LINUX7.3
💻 C
字号:
#include "common.h"

/*--------------------------	Global Variables for Sockets	-------------------------------*/
#define SENDPORT  6000          /* TCP send port */

#define RECVPORT  6000          /* Listening port */
//does not stay in the server mode yet!

//#define DESTHOST  in_aton( "10.0.0.1" )

char	server_ip[50];	//IPV4 address of the file server.
struct 	socket *		tcpsock;
struct	sockaddr_in	    tcpsin;

/*==========================	Kernel Socket Manipulation	===================================*/
void setup_server_ip( char* ip_addr )
{
	sprintf( server_ip, ip_addr );
}

int	tcp_create_socket()
{
	if (sock_create( PF_INET, SOCK_STREAM, IPPROTO_TCP, &tcpsock) < 0) {
		printk("Error during creation of socket; terminating\n");
		return -1;
	}

	tcpsin.sin_family	    = AF_INET;
	tcpsin.sin_addr.s_addr  = in_aton(server_ip);
	tcpsin.sin_port         = htons( SENDPORT );

	if ( tcpsock->ops->connect(tcpsock, (struct sockaddr*)&tcpsin, sizeof(tcpsin), 0) < 0 ){
		printk( "Error connecting to the remote host\n" );
		return -1;
	}

	tcpsock->sk->reuse = 1;

	return 0;
}

int tcp_sendbuffer(struct socket *sock, const char *buffer,const size_t length)
{
	struct msghdr	msg;
	mm_segment_t	oldfs;
	struct iovec	iov;
	int		len;

	msg.msg_name     = 0;
	msg.msg_namelen  = 0;
	msg.msg_iov	 = &iov;
	msg.msg_iovlen   = 1;
	msg.msg_control  = NULL;
	msg.msg_controllen = 0;
	msg.msg_flags    = MSG_NOSIGNAL;
	msg.msg_iov->iov_len = (__kernel_size_t)length;
	msg.msg_iov->iov_base = (char*) buffer;

	oldfs = get_fs(); set_fs(KERNEL_DS);
	len = sock_sendmsg(sock, &msg, length);
	set_fs(oldfs);
	return len;
}


int tcp_recvbuffer(struct socket *sock, char *buffer, const size_t buflen)
{
	struct msghdr		msg;
	struct iovec		iov;
	int			len;
	mm_segment_t		oldfs;

	/* Receive a packet */
	msg.msg_name     = 0;
	msg.msg_namelen  = 0;
	msg.msg_iov	 = &iov;
	msg.msg_iovlen   = 1;
	msg.msg_control  = NULL;
	msg.msg_controllen = 0;
	msg.msg_flags    = 0;

	iov.iov_base = buffer;
	iov.iov_len  = (size_t)buflen-1;

	oldfs = get_fs(); set_fs(KERNEL_DS);
	len = sock_recvmsg(sock, &msg, buflen-1, 0);
	set_fs(oldfs);

	if (len < 0)
		return -1;

	return len;
}


⌨️ 快捷键说明

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