next up previous contents
Next: Buffermanipulációs rutinok Up: A Transport Layer Previous: Egy nem összeköttetés-alapú

Kommunikációs végpont (TSAP) létrehozása

Egy kommunikációs végpontot a t_open() hívással foglalhatunk le. Ez visszaad egy (int típusú) filedeszkriptort, amellyel a késobbiekben a kommunikációs végpontra hivatkozni lehet. A t_open() hívás alakja a következo:

     td=t_open(filename,flags,info);

Ahol a filename paraméter egy stringre mutat, és az a string tartalmazza az általunk kívánt transzport-protokollt implementáló device driver filenevét (ezek a nevek nem szabványosítottak - a TCP-t leggyakrabban /dev/tcp, az UDP-t pedig /dev/udp néven érhetjük el). A flags paraméter a UNIX rendszerben megismert open() rendszerhívásnál használható flageket tartalmazza - szerepük ugyanz, mint ott volt.

A harmadik paraméter (neve info) egy t_info nevu struktúrára pointer. Ebben a struktúrában adja vissza a rendszer a használt transzport-protokollal kapcsolatos fontosabb információkat. A struktúra szerkezete és az egyes mezoinek a szerepe a következokben lesz ismertetve:

     struct t_info {
          long addr;
          long options;
          long tsdu;
          long etsdu;
          long connect;
          long discon;
          long servtype;
     };

Az egyes mezok jelentése:

Hogy a használt transzport-protokoll milyen paramétereket ad vissza, azt a következo programmal megtekinthetjük (és ezzel ez az elso példaprogramunk, ami a TLI-t használja):

/*
 *
 * tinfo.c
 *
 * Ez a program kiirja a TRANSPORTDEV transzport
 * szolgaltato parametereit (t_info komponenset).
 *
 * Forditasa:
 *
 *   cc tinfo.c -lnsl_s
 */

#include <tiuser.h>
#include <stdio.h>
#include <fcntl.h>

#define TRANSPORTDEV "/dev/tcp"

main()
{
  struct t_info ti;
  int tfd;
  
  tfd=t_open(TRANSPORTDEV,O_RDWR,&ti);
  if (tfd == (-1)) {
    perror("Hiba a t_open()-nel!");
    exit(1); }
  printf("t_info.addr = %ld\n",ti.addr);
  printf("t_info.options = %ld\n",ti.options);
  printf("t_info.tsdu = %ld\n",ti.tsdu);
  printf("t_info.etsdu = %ld\n",ti.etsdu);
  printf("t_info.connect = %ld\n",ti.connect);
  printf("t_info.discon = %ld\n",ti.discon);
  printf("t_info.servtype = %ld\n",ti.servtype);
  t_close(tfd);
}



next up previous contents
Next: Buffermanipulációs rutinok Up: A Transport Layer Previous: Egy nem összeköttetés-alapú



Csizmazia Balazs
Tue Apr 2 00:06:27 MET DST 1996