16.3.1 socket()的初始化

本文详细介绍了在创建socket()时的初始化过程,包括参数family、type、protocol的作用。创建socket不仅涉及文件描述符结构的建立,还会初始化proto_ops结构以对应stream类型的socket操作。在初始化过程中,会设置接收和发送数据包的队列,以及用于TCP三次握手的数据包队列。当应用层关闭socket时,内核会释放相关资源。
摘要由CSDN通过智能技术生成

16.3.1  socket()的初始化

创建socket()需要传递familytypeprotocol3个参数。创建socket()其实就是创建一个socket实例,然后创建一个文件描述符结构。创建套接字文件描述符会互相建立一些关联,即建立互相连接的指针,并且初始化这些对文件的写读操作映射到socket

在 iOS 13 之前,可以使用 `CFStream` 和 `CFNetwork` 库来创建 TCP 长连接。以下是一个简单的示例: ```objc CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)@"example.com", 80, &readStream, &writeStream); CFReadStreamOpen(readStream); CFWriteStreamOpen(writeStream); // 写入数据 NSString *requestStr = @"GET / HTTP/1.0\r\n\r\n"; NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding]; CFIndex bytesWritten = CFWriteStreamWrite(writeStream, [requestData bytes], [requestData length]); NSLog(@"%ld bytes written", bytesWritten); // 读取数据 UInt8 buffer[1024]; CFIndex bytesRead = CFReadStreamRead(readStream, buffer, sizeof(buffer)); NSLog(@"%ld bytes read", bytesRead); CFReadStreamClose(readStream); CFWriteStreamClose(writeStream); CFRelease(readStream); CFRelease(writeStream); ``` 在 iOS 13 之后,`CFNetwork` 库被宣布废弃,推荐使用 `NSURLSession` 或 `Network.framework` 来创建网络连接。以下是使用 `NSURLSession` 创建 TCP 长连接的示例: ```objc NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; config.allowsCellularAccess = YES; config.timeoutIntervalForResource = 60.0; NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil]; NSURL *url = [NSURL URLWithString:@"http://example.com"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"GET"; NSURLSessionDataTask *task = [session dataTaskWithRequest:request]; [task resume]; ``` 在 `NSURLSessionDelegate` 协议中实现以下方法以处理响应: ```objc - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { NSLog(@"Received %ld bytes", [data length]); } - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { if (error) { NSLog(@"Request failed with error: %@", error); } else { NSLog(@"Request finished successfully"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值