📄 tcpsocket.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 + -