|
どうも初めまして。ネットワークプログラミング始めたばかりの者です。 ちょっと前までは決まりきったものだと特に気に止めずに流していたのですが、 connect()関数の第2引数が connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) というふうに普通していますが、どういう意味なんでしょうか? servaddrのアドレスさえ渡してやればいいように思うのですが。(ん?その前にC言語の 文法がまだ完全に理解できていなのかも?)servaddr構造体のアドレスをsockaddr構造体 のポインタでキャストしてる?なんかよく分かりません。 助言をお願いします。 |
|
>>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 を使って いるならば)。 |
|
>>3921 立神梢一 だいぶ時間が空いてしまいましたが、sslをはずしてコンパイルしてみましたが 変化なく、その後名前解決をもう一度見直したところどちらの状態(ssl有り/無し) でも問題ない速度で動作しました。やはり名前解決周りだったようです。 ご報告が遅くなりました。ありがとうございました。 |
|
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、 「grep ':00*:' /etc/passwd」とすると rootだけが以下のような内容で引っかかります。 「root:x:0:1:Super-User:/:sbin/sh」 しかし、何故これがひっかかるのかがわかりません。 grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの 行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。 OSはSolaris7を使用しています。 |
|
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、 「grep ':00*:' /etc/passwd」とすると rootだけが以下のような内容で引っかかります。 「root:x:0:1:Super-User:/:sbin/sh」 しかし、何故これがひっかかるのかがわかりません。 grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの 行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。 OSはSolaris7を使用しています。 |
|
>>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 などとすればよいかと思います。 |