+// Convention: odd=connection-oriented, even=connection-less
+typedef enum Protocol {
+ kProto_TCP = IPPROTO_TCP,
+ kProto_DCCP = IPPROTO_DCCP,
+ kProto_UDP = IPPROTO_UDP,
+} Protocol;
+
+static inline const char *protoName(const unsigned proto)
+{
+ switch(proto) {
+ case kProto_TCP: return "TCP";
+ case kProto_DCCP: return "DCCP";
+ case kProto_UDP: return "UDP";
+ default: return "(unknown)";
+ }
+}
+
+static inline unsigned sockType(const Protocol p)
+{
+ switch (p) {
+ case kProto_TCP: return SOCK_STREAM;
+ case kProto_UDP: return SOCK_DGRAM;
+ case kProto_DCCP: return SOCK_DCCP;
+ }
+}
+
+static inline bool is_connectionless(const Protocol p)
+{
+ return p == kProto_UDP;
+}
+