[doubango Programmer's Guide] 10 Sockets and Network Functions(tinyNET) 翻译

来源:互联网 发布:蜂鸟网络 深圳 编辑:程序博客网 时间:2024/06/05 05:02

10  套接字与网络函数

所有的 与网络相关的函数都来自tinyNET工程。

在调用任何与网络相关的函数(tnet_*)前你必须先调用tnet_startup().结束使用网络相关函数时应当调用tnet_cleanup()。

startup函数将会检测当前机器是不是小端存储模式。要想使用所有的网络相关函数,就必须加入头文件#include “tinynet.h”。

10.1 套接字

由于性能的原因,所有用tinyNET创建出的套接字都是默认非阻塞的。新创建的套接字将会自动绑定给定的IP和端口号,并用它来进行通信。

 tnet_socket_create()是用来创建并且绑定一个非阻塞套接字的。使用tnet_socket_create_2() 函数可以控制套接字是否绑定。同样这个函数也可以强制在堆中创建一个阻塞套接字。

一个套接字对象是这样定义的:

typedef struct tnet_socket_s{        TSK_DECLARE_OBJECT;                tnet_socket_type_t type;        tnet_fd_t fd;        tnet_ip_t ip;        uint16_t port;        tnet_tls_socket_handle_t* tlshandle;}tnet_socket_t;


创建一个套接字:

// (create udp ipv4 or ipv6 socket)tnet_socket_t* socket = tnet_socket_create(                TNET_SOCKET_HOST_ANY, // local ip address/hostname to bind to                TNET_SOCKET_PORT_ANY, // local port number to bind to                tnet_socket_type_udp_ipv46 // the socket type (IPv4 or IPv6)                );// TNET_SOCKET_HOST_ANY --> bind to "0.0.0.0" or "::"// TNET_SOCKET_PORT_ANY --> bind to any available port


TNET_SOCKET_TYPE_IS_*宏用来决定:

 

  • 套接字类型(流,报文)
  • 套接字协议 (udp, tcp, tls, sctp, ipsec),
  • IP版本 (ipv6, ipv4),
  •  

套接字是一个定义好的对象,应该使用TSK_DECLARE_SAFE_FREE()宏对其进行销毁。套接字本身也将在被销毁时自动关闭。

 

10.2 传输

 在传输层中,总是有一个主套接字来决定我们将以哪种方式进行传输(流,报文)。流式套接字能管理TCP,TLS 和SCTP几种套接字,而报文式套接字只能管理UDP套接字。两种传输方式都可以使用IPv4或者IPv6。