Odavno se ne bavim IRC-om aktivno ali otprilike DCC (protokol) radi (veoma uprosteno objasnjenje) ovako (pod pretpostavkom da osoba1 zeli da posalje fajl osobi2):
1) klijent1 kreira socket, najcesce "bind"-ovan na INADDR_ANY, dakle kernel sam odluci koji interfejs ce se koristiti, a ista prica je takodje i sa portom - i tu lezi zec. Ti verovatno zelis da imas fiksni port ovde, i to moze lako da se sredi u xchat-u (
http://www.xchat.org), a verovatno i u mIRC-u. Naravno ovaj socket se kreira za "slusanje". Nakon ovoga klijent1 posalje specifican CTCP zahtev klijentu2. U ovom CTCP zahtevu se nalazi port i IP adrese na kojoj klijent1 "slusa", tj. ceka da klijent2 "pokuca na vrata". :)
1.2) Slusa klijent1 tako i slusa, i odjednom primeti konekciju - prihvati je, zatvori originalni (pasivni) socket i pokrene "primanje" podataka putem novokreiranog socket-a (accept() UVEK kreira novi socket).
2) klijent2 dobije pomenuti CTCP zahtev i najcesce prikaze dijalog korisniku i pita ga sta da radi - da li da primi taj fajl ili ne (ili da li da primi chat ili ne, posto DCC radi u dva moda). Ako korisnik odgovori pozitivno, onda klijent2 kreira socket, veze ga na gorepomenutu IP adresu i port (poslani su CTCP zahtevom koji smo objasnili u stavki 1), i pokrene transfer podataka.
Kad se ovo zna onda bi trebalo da se zna i sta da se radi na firewall-u.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin