关于创建socket时参数的讨论,一定是: 流式-TCP,数据报-UDP ?

例如:SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
第2个参数如果选流式套接字SOCK_STREAM,则第3个参数是否必须是IPPROTO_TCP;
若第2个参数选了数据报套接字SOCK_DGRAM,则第3个参数是否必须是IPPROTO_UDP ?
即流式套接字一定使用TCP协议,数据报套接字一定使用UDP协议??
[210 byte] By [bachelor2001-无中生有] at [2008-1-9]
# 1
当然,第3个参数也可以用0,让系统自己选择
问题是,要是我使用了流式套接字,但是用的是UDP协议,或者使用数据报套接字,但是用TCP协议,会有什么问题?
bachelor2001-无中生有 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 2
偶试了一下,创建失败,这么说,这2个参数一定要匹配了
bachelor2001-无中生有 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 3
TCP是有连接的,可以视为流。而UDP是无连接的,必定是数据报。
dancingbit-芥子 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 4
流式套接字还有其他协议族
changdia at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 5
我记得还有个RAW。
rtdb-东临碣石 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 6
當然不是一定的,看看下面的定議:
/*
* Protocols
*/
#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_ICMP 1 /* control message protocol */
#define IPPROTO_IGMP 2 /* internet group management protocol */
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
#define IPPROTO_TCP 6 /* tcp */
#define IPPROTO_PUP 12 /* pup */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_IDP 22 /* xns idp */
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */

#define IPPROTO_RAW 255 /* raw IP packet */
#define IPPROTO_MAX 256
# 7
如果不搭配会出现socket error 10043:

WSAEPROTONOSUPPORT

Protocol not supported. The requested protocol has not been configured into the system, or no implementation for it exists. For example, a socket call requests a SOCK_DGRAM socket, but specifies a stream protocol.
calories-努力中... at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...