MTK socket 小结 3
2010-09-05 18:03
253 查看
在 MTK socket 小结 2 说了一个socket create 函数,不知道今天能说几个,create 了一个socket,就像打开了一个文件,可以对其进行操作,当然操作前要稍微进行一些设置。
待续
//关闭socket 与 soc_create 成对使用 kal_int8 soc_close(kal_int8 s)
// 绑定一个socket 到 一个指定的ip地址 和 端口。主要用于服务器短开发 // 一般ip 地址全 0,端口就是想要绑定的端口 // 在实际开发中,几乎不会用到,除非想用手机做服务器,hoho。 kal_int8 soc_bind(kal_int8 s, sockaddr_struct *addr);
// 绑定完socket 之后,就可以监听这个 ip的端口 // 这个也几乎不会用,也是用于服务器端。 // backlog 同时能连接的socket 个数 kal_int8 soc_listen(kal_int8 s, kal_uint8 backlog);
// 当有socket 连接到该机时,accept 就可以获得该连接,同样也是用于服务器端 // addr 可以获得连接过来的socket 地址 // 返回一个新的socket kal_int8 soc_accept(kal_int8 s, sockaddr_struct *addr);
// 连接到一个指定ip地址的服务器 // 这个函数很常用,要想联网,就的通过 addr 指定ip地址和端口 // 根据不同的模式 (block, none block,asynchronous,这个函数会稍微不同 // 如果是block,那么整个task 就被block,直到connect 成功或者失败或者超时 // 这个如果在MMI task 里面,后果就会比较严重(界面不动,无响应) // 所以最常用 none block + asynchronous, 几乎马上返回,成功或失败或者SOC_WOULDBLOCK // 大部情况下返回SOC_WOULDBLOCK,那么就等待消息,由消息得知到底成功or失败。 // addr 就是要连接的ip地址和端口 kal_int8 soc_connect(kal_int8 s, sockaddr_struct *addr)
// 向指定的ip地址和端口发送数据 // buf 和 len 分别是要发送的内容和长度 // flag 暂时没有使用 设置为 0 // addr 指定要发送到的ip地址和端口 // 说明:如果create socket 的时候是TCP,那么还是需要先connect 到 服务器,再调用该函数 // 这与 berkeley 的 socket 规范有点区别 kal_int32 soc_sendto(kal_int8 s, void *buf, kal_int32 len, kal_uint8 flags, sockaddr_struct *addr);
// 向已经connect 的上的服务器发送数据 // buf 和 len,是要发送的内容和长度 // flags 暂时不使用 // 这个也是很常用的, 连接完毕之后,就可以发送数据了 // 比如要请求一个网页,那么就发送一个HTTP 请求就可以了 // 跟soc_connect 一样,最找在 模式 3 下使用 kal_int32 soc_send(kal_int8 s, void *buf, kal_int32 len, kal_uint8 flags);
// 从指定地址接收数据 // buf 读取数据的buf,len 读取数据buf的最大长度 // flags 暂时无用,设置为0 // 返回实际读取的数据长度 kal_int32 soc_recvfrom(kal_int8 s, void *buf, kal_int32 len, kal_uint8 flags, sockaddr_struct *fromaddr); // 从已经连接上的服务器上接收数据 // 同样最好在模式 3 下使用,当收到消息有可读数据时, // 可以调用该函数,从socket 里面读取数据 // 参数同上 kal_int32 soc_recv(kal_int8 s, void *buf, kal_int32 len, kal_uint8 flags);
// 设置socket的参数,当创建好socket 之后,就可以设置了 // 模式 3 none block + asynchronous 就是通过这个函数设置定的 kal_int8 soc_setsockopt(kal_int8 s, kal_uint32 option, void *val, kal_uint8 val_size); // 比如 S8 val = 0, ret = 0; val = KAL_TRUE; // 设置为none block 模式,默认为block 模式 ret = soc_setsockopt(soc_id , SOC_NBIO, &val, sizeof(val)); // 设置为异步模式,并且监听消息,这里设置了 // SOC_READ 表示有数据可读,也就是可以调用 soc_recv 读取 // SOC_WRITE 表示可以写,也就是可以通过soc_send来发送数据 // SOC_CONNECT 表示连接是否成功 // SOC_CLOSE 表示是否被关闭, 服务器端也可以是关闭连接的 val = SOC_READ|SOC_WRITE|SOC_CONNECT|SOC_CLOSE; ret = soc_setsockopt(soc_id, SOC_ASYNC, &val, sizeof(val));
待续
相关文章推荐
- MTK socket 小结 2
- MTK socket 小结 5
- MTK socket 小结 4
- MTK socket 小结 3
- MTK socket 小结 4
- MTK socket 小结 1
- MTK socket 小结 3
- MTK socket 小结 4
- MTK socket 小结 2
- MTK socket 小结 1
- MTK socket 小结 2
- MTK socket 小结 1
- MTK Android 编译小结
- TCP/IP,http,socket,长连接,短连接——小结
- MTK MMI event 小结 5
- Socket编程小结2
- 关于java Socket与C#通信编码问题小结
- socket编程几个函数小结
- Unix domain socket 的一些小结
- Socket网络编程--epoll小结