68user's page 掲示板

Prev< No. 3925〜3930> Next  [最新発言に戻る] [過去ログ一覧]
No. 3925 # hex 2004/08/17 (火) 02:33:40
どうも初めまして。ネットワークプログラミング始めたばかりの者です。
ちょっと前までは決まりきったものだと特に気に止めずに流していたのですが、
connect()関数の第2引数が
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))
というふうに普通していますが、どういう意味なんでしょうか?
servaddrのアドレスさえ渡してやればいいように思うのですが。(ん?その前にC言語の
文法がまだ完全に理解できていなのかも?)servaddr構造体のアドレスをsockaddr構造体
のポインタでキャストしてる?なんかよく分かりません。
助言をお願いします。

No. 3926 # 68user 2004/08/17 (火) 02:59:57
>>3922 社長の猿
おそらく BASIC 認証と呼ばれるものだと思いますので、
>>2612 68user
を参考にしてください。

>>3923
proxy サーバを経由しないと学校や会社の外に出られない環境とか
(proxy サーバの IP アドレスは 1つ)、一度 IP アドレスが割り当て
られたものの、しばらくアクセスしなかったので他の人に同じ IP
アドレスが割り当てられた、という可能性があります。

>>3924 ネットワーク1年生
わたしはネットワークの仕組みはよく知らないのですが、
> CSMA/CDの他、CSMA/CA、ホットポテトルーティング、近隣探索機能(v6)
CSMA/CD・CSMA/CA は近いという概念とはまったく関係なく、LAN 内での
コリジョンを防止するための仕組みだと思っています。

http://e-words.jp/w/CSMA2FCD.html
http://e-words.jp/w/CSMA2FCA.html

ホットポテトルーティングはわかりません。Anycast もよくわかりませんが、
どこが違いかどうかはルータが判断するものではないかなぁと思っています
(末端のアプリが判断する必要はない)。で、ルータがどういう基準で近さを
判断しているかはわかりません。

>>3925 hex
> servaddrのアドレスさえ渡してやればいいように思うのですが
根本的にはその通りです。ただ、connect(2) は struct sockaddr_in の
アドレスを受け取ったり (インターネットのアドレスの場合)、struct
sockaddr_un のアドレスを受け取ったりしなければいけません (UNIX
ドメインのアドレスの場合)。

しかし C 言語ではいろいろな型を受け取る関数を作ることはできないため
(Java や C++ のように関数のオーバーロードができないため)、struct sockaddr
という汎用的な構造体を定義し、それにキャストすることで connect(2) に
struct sockaddr_in も struct sockaddr_un も渡せるようにしています。

まぁ C の言語上の制約を回避するための汚い手ですね。コンパイラに警告を
くらってもいいなら、キャストなしでも動くと思います (C++ でなく C を使って
いるならば)。

No. 3927 # 立神梢一 [URL] [E-mail] 2004/08/17 (火) 03:39:52
>>3921 立神梢一
だいぶ時間が空いてしまいましたが、sslをはずしてコンパイルしてみましたが
変化なく、その後名前解決をもう一度見直したところどちらの状態(ssl有り/無し)
でも問題ない速度で動作しました。やはり名前解決周りだったようです。
ご報告が遅くなりました。ありがとうございました。

No. 3928 # yoshitani 2004/08/17 (火) 10:53:25
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、
grep ':00*:' /etc/passwdとすると
rootだけが以下のような内容で引っかかります。
root:x:0:1:Super-User:/:sbin/sh
しかし、何故これがひっかかるのかがわかりません。
grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの
行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。
OSはSolaris7を使用しています。
  

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3929 # yoshitani 2004/08/17 (火) 10:58:56
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、
「grep ':00*:' /etc/passwd」とすると
rootだけが以下のような内容で引っかかります。
「root:x:0:1:Super-User:/:sbin/sh」
しかし、何故これがひっかかるのかがわかりません。
grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの
行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。
OSはSolaris7を使用しています。
  

No. 3930 # 68user 2004/08/17 (火) 13:20:17
>>3929 yoshitani
> grepの条件で「:00*:」としているのに
:00*: は、
      コロンがあって、その後に 0 があって、その後に 0個以上の
      0 があって、その後にコロンがある
という正規表現ですので、
> 「root:x:0:1:Super-User:/:sbin/sh」
の :0: の部分にマッチします。

GID が 0 のものを引っ張りたいなら、
    % grep ':[0-9][0-9]*:0:' /etc/passwd
    % awk -F: '$4~/^0$/ {print}' /etc/passwd
などとすればよいかと思います。

Prev< No. 3925〜3930> Next  [最新発言に戻る] [過去ログ一覧]