zoukankan      html  css  js  c++  java
  • socketconnect函数详解

    转自:http://www.cnblogs.com/newlist/archive/2012/02/19/2358611.html,尊重原创!

    摘要:网络编程socket api存在一批核心接口,而这一批核心接口就是几个看似简单的函数,尽管实际上这些函数没有一个是简单。connect函数就是这些核心接口的一个函数,它完成主动连接的过程。

    connect函数的功能是完成一个有连接协议的连接过程,对于TCP来说就是那个三路握手过程,它的函数原型:

    #include<sys/socket.h> int connect(int sockfd, const struct sockaddr* server_addr, socklen_t addrlen) 返回:0──成功, -1──失败。

    为了理解connect函数,我们需要对connect函数的功能进行介绍。connect函数的功能可以用一句话来概括,就是完成面向连接的协议的连接过程,它是主要连接的。面向连接的协议,在建立连接的时候总会有一方先发送数据,那么谁调用了connect谁就是先发送数据的一方。如此理解connect三个参数是容易了,我必需指定数据发送的地址,同时也必需指定数据从哪里发送,这正好是connect的前两个参数,而第三个参数是为第二个参数服务的。

    参数sockfd
    指定数据发送的套接字,解决从哪里发送的问题。内核需要维护大量IO通道,所以用户必需通过这个参数告诉内核从哪个IO通道,此处就是从哪个socket接口中发送数据。sockfd是先前socket返回的值。
    参数server_addr
    指定数据发送的目的地,也就是服务器端的地址。这里服务器是针对connect说的,因为connect是主动连接的一方调用的,所以相应的要存在一个被连接的一方,被动连接的一方需要调用listen以接受connect的连接请求,如此被动连接的一方就是服务器了。
    参数addrlen
    指定server_addr结构体的长度。我们知道系统中存在大量的地址结构,但socket接口只是通过一个统一的结构来指定参数类型,所以需要指定一个长度,以使内核在进行参数复制的时候有个有个界限。

    与所有的socket网络接口一样,connect总会在某个时候可能失败,此时它会返回-1,相应的errno会被设置,用户可能通过这个值确定是哪个错误。常见的错误有对方主机不可达或者超时错误,也可以是对方主机没有相应的进程在对应端口等待。

  • 相关阅读:
    50种方法巧妙优化你的SQL Server数据库
    sql server数据库中选出指定范围的行的sql语句写法
    如何开启SQLSERVER数据库缓存依赖优化网站性能
    网站项目建设流程概述
    一个flash网页图片播放器
    ASP.NET中备份sqlserver数据库的方法
    ASP.NET(C#)实现一次性上传多张图片(多个文件)
    GridView使用技巧之:新增记录、GridView内数据验证、删除信息提示等
    FreeTextBox控件上传图片到指定的绝对路径的改进
    Linux环境下的32位与64位
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/2945651.html
Copyright © 2011-2022 走看看