暂且不说这个数据块是从哪儿来的,是怎么传到网卡上面来的。咱们先在要说的是,数据到达网卡以后会发生什么事情。很简单,网卡将数据交给需要该数据的程序就可以了。网卡是如何知道谁需要这个数据呢?难道是吼一嗓子,“喂,大家注意了,我这儿接到一个数据,有没有需要的?”。当然不是。它会告诉它的秘书──网卡驱动程序。网卡驱动程序再从他的笔记本中找到,都是谁告诉过他需要这些数据,然后调用对应的回调函数来拷贝这些数据。
那么,如何告诉网卡驱动程序谁需要这些数据呢?很简单,调用对应的中断就可以了。在dos里面,驱动程序不想windows里面一样由操作系统来管理。在dos下,任何程序都可以干任何事情。普通的应用程序很多时候都需要直接跟驱动程序打交道。WatTcp就直接调用驱动程序的中断,来进行数据的收发的。那么,怎么调用驱动程序呢?对于网卡驱动来说,有一个规范《PC/TCP Version 1.09 Packet Driver Specification》它是1989年制定的一个dos下驱动程序的标准。也是dos下驱动程序的最后一个标准。其中就规定了如何设置网卡的工作模式、如何接受数据,如何发送数据等等。我们这儿关心的是,如何让网卡驱动将数据传达给我们。在WatTcp里面是这样做的:
[src/pcpkt.c]
for ( class = 0; class < 2; ++class ) {
_pktdevc