Linux 套接字(1)

套接字的特性由三个属性确定 :  域,  类型,   协议.

1.域

AF_UNIX  UNIX域协议 ( 文件系统套接字)

AF_INET   ARPA因特网协议 (UNIX网络套接字)

...省略

2.类型

1)  流套接字:  SOCK_STREAM

2)  数据报套接字 :  SOCK_DGRAM

3. 协议

一般由套接字类型和套接字域来决定, 通常不需要选择. 将该参数设置为0表示使用默认协议.

套接字地址.

1)  AF_UNIX

struct sockaddr_un {

sa_family_t  sun_family;   /* AF_UNIX */

char               sun_path[];  /* pathname */

};

2) AF_INET

struct sockaddr_in {

short int                          sin_family;  /* AF_INET */

unsigned   short  int     sin_port;   /* port   number */

struct   in_addr              sin_addr;   /* Internet  address */

};    该结构定义在头文件 netinet/in.h 中

IP地址结构in_addr被定义为:

struct  in_addr  {

unsigned  long int  s_addr;

};

1. 命名套接字

#include  <sys/socket.h>

int bind( int socket,  const struct sockaddr *address,  size_t address_len);

2. 创建套接字队列

#include <sys/socket.h>

int listen( int socket,  int backlog);

3.接受连接

#include <sys/socket.h>

int accept( int socket,  struct sockaddr *address,  size_t  *address_len );

4.请求连接

#include <sys/socket.h>

int connect( int socket,  const struct sockaddr *address,  size_t  address_len);

5.关闭套接字

close();

时间: 2024-10-06 14:28:41

Linux 套接字(1)的相关文章

linux套接字通信之recv中的缓存机制的研究

以前一直有这么一个小小的疑惑,当一个进程注册一个套接字后,如果这个套接字没有被调用recv函数接受数据包,那么这个套接字能接受到数据包吗? 或者这样说,如果我的程序注册了一个套接字去接受数据包,但是每收到一个数据包都需要很长一段时间处理,并且在处理数据包的途中recv函数使没有被调用的,那么如果程序再处理数据包的途中有数据包到来,那我的程序会不会漏过这些数据包(那个包到达的时候程序在处理别的包,而没有调用recv函数)? 答案是不会的.事实上linux中会为每个套接字建立缓存,当属于套接字的包到

windows和linux套接字中的select机制浅析

先来谈谈为什么会出现select函数,也就是select是解决什么问题的? 平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待,这样实时性就不是太好. 这个问题的几个解决方法:1. 使用ioctlsocket函数,将recv函数设置成非阻塞的,这样不管套接字上有没有数据都会立刻返回,可以重复调用recv函数,这种方式叫做轮询(polling),但是这样效率很是问题,因为,大多数时间实际上是无数据可读的,花费时间不断反复执行

linux 套接字编程入门--Hello World

下述代码是linux套接字编程的入门代码.分为服务端和客户端源码. 服务端代码的主要流程是绑定ip地址和端口号建立套接字,等待客户端发起访问.接受客户端请求之后,向客户端发送字符串"hello world",关闭套接字,结束程序. 客户端代码的主要流程是向服务端对应的套接字发起请求,读取服务端发送的数据,并且打印出来. 代码已经详细注释,更多细节不再赘述. server.cpp #include<stdio.h> #include<stdlib.h> #incl

Linux 套接字编程 - select

select 可以感知文件表述符集合中的变化,如果办fd0(即标准输入)放入select的read fd set,发现只有按回车的时候select才会返回.查了下要把终端的缓冲大小设为1,这样就能实现击键后马上反应了. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <termio.h> #include <sys/

Linux 套接字编程 - TCP连接基础

第五章的内容,实现一个echo服务器和对应的客户端,主要收获: 0. TCP socket编程主要基本步骤 1. SIGCHLD信号含义(子进程退出时向父进程发送,提醒父进程对其状态信息进行一个获取),waitpid 和 wait在使用上的差异,前者可以配置参数设定为非阻塞方式调用,更加灵活. 2. 信号处理函数与其过程(尤其是信号发生后不列队这个性质),相同的信号多次发生(间隔非常接近的话)可能仅会调用一次信号处理函数 3. 信号处理对慢系统(阻塞)调用如accept等的影响(如果信号处理设置

Linux 套接字编程中的 5 个隐患(转)

本文转自IBM博文Linux 套接字编程中的 5 个隐患. “在异构环境中开发可靠的网络应用程序”. Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它们. 在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开发人员仍然会遇到一些常

Linux 套接字编程中的 5 个隐患

在异构环境中开发可靠的网络应用程序 M. Tim Jones ([email protected]), 资深软件工程师, Emulex 简介: Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它们. 发布日期: 2005 年 10 月 08 日 级别: 中级 访问情况 : 13059 次浏览 评论: 0 (查看 | 添加评论 - 登录)  平均分 (34个评分)为本文评分 在

linux套接字编程练习之网络选课模拟

  1 /****************************************                                                                                                    2     > File Name:server.c   3     > Author:xiaoxiaohui   4     > mail:[email protected]   5     >

linux套接字编程之多进程多线程练习

一.概述:本次练习的是linux下的TAP/IP套接字多进程与多线程编程,功能只实现了对话.话不多说,直接上代码. 二.多进程: server.c: 1 /****************************************   2     > File Name:server.c   3     > Author:xiaoxiaohui   4     > mail:[email protected]   5     > Created Time:2016年05月15

Linux 套接字编程中要注意的细节

隐患 1.忽略返回状态 第一个隐患很明显,但它是开发新手最容易犯的一个错误.如果您忽略函数的返回状态,当它们失败或部分成功的时候,您也许会迷失.反过来,这可能传播错误,使定位问题的源头变得困难. 捕获并检查每一个返回状态,而不是忽略它们.考虑清单 1 显示的例子,一个套接字 send 函数. 清单 1. 忽略 API 函数返回状态 int status, sock, mode; /* Create a new stream (TCP) socket */ sock = socket( AF_IN