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

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值