How to use DCCP with twisted ? (Datagram Congestion Control Protocol)

299 Views Asked by At

At the interface level DCCP is like TCP: you connect and then send/receive bytes.

I was wondering it's possible to make dccp connections in twisted by just adapting the wrappers for tcp...

According to the sample code (below) what needs to be changed is:

  • at socket instantiation: use different parameters
  • before using the socket: set some options

Then everything else would be the same...

Hints: I've spotted addressFamily and socketType in the sources of twisted but I have no idea on how to cleanly set them in the protocol factory. Also the protocol number, the 3rd parameter, here IPPROTO_DCCP, is always keeped to default. I have no clue either on how to access the socket to call setsockopt

import socket

socket.DCCP_SOCKOPT_PACKET_SIZE = 1
socket.DCCP_SOCKOPT_SERVICE     = 2
socket.SOCK_DCCP                = 6
socket.IPPROTO_DCCP             = 33
socket.SOL_DCCP                 = 269
packet_size                     = 256
address                         = (socket.gethostname(),12345)

# Create sockets
server,client = [socket.socket(socket.AF_INET, socket.SOCK_DCCP,
                               socket.IPPROTO_DCCP) for i in range(2)]
for s in (server,client):
    s.setsockopt(socket.SOL_DCCP, socket.DCCP_SOCKOPT_PACKET_SIZE, packet_size)
    s.setsockopt(socket.SOL_DCCP, socket.DCCP_SOCKOPT_SERVICE, True)

# Connect sockets
server.bind(address)
server.listen(1)
client.connect(address)
s,a = server.accept()

# Echo
while True:
    client.send(raw_input("IN: "))
    print "OUT:", s.recv(1024)

More about DCCP: https://www.sjero.net/research/dccp/ https://wiki.linuxfoundation.org/networking/dccp

TL;DR: dccp is a protocol that provides congestion control (like tcp) without guaranteeing reliability or in-order delivery of data (like udp). The standard linux kernel implements dccp.

0

There are 0 best solutions below